---
title: "MetaMask Snap Case Study"
canonical: https://wavect.io/case-studies/metamask-snap/
language: en
description: "A MetaMask Snap bringing Boba Network's Account Abstraction and Hybrid Compute smart wallets natively into the world's most-used Web3 wallet."
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

[← All case studies](/case-studies/)

![MetaMask Snap logo](/img/clients/svg/boba-network.svg)

CASE STUDIES · 2025

MetaMask Snap

# Boba's Account Abstraction stack, native inside MetaMask. No new wallet to learn.

Boba Network’s Account Abstraction enables smart wallets with Hybrid Compute, executing complex on-chain/off-chain logic in one flow. The Snap brings this natively into the world’s most-used Web3 wallet.

FUNDS Fullstack Build 2025 Live

At a glance

Engagement Fullstack Build

Industry [Blockchain / Wallet Integration](/industries/blockchain-web3/)

Stage Enterprise · $115M raised

Engagement size Monthly retainer

Year 2025

Stack

Typescript MetaMask Snaps Solidity Ethers.js

Status Live

Live [boba.network](https://boba.network/)

## Overview

Boba Network’s Account Abstraction enables smart wallets with Hybrid Compute, executing complex on-chain/off-chain logic in one flow. The Snap brings this natively into the world’s most-used Web3 wallet.

## What's the challenge?

MetaMask Snaps are powerful and tightly sandboxed. Strict permission model, opinionated execution context, and a boundary that runs straight through what Boba’s Account Abstraction needed to do. Make smart wallet management feel native, without fighting the sandbox or teaching users anything new.

## What call did we make?

### MetaMask's sandbox doesn't bend. The use case had to.

> Snaps are powerful and tightly sandboxed by design. For our use case, the sandbox was a constant negotiation. Application whitelisting, what a Snap can call, what it can persist, what crosses the boundary, every limit got routed around, not fought. The result lives inside MetaMask's rules. The only kind of Snap that ships.

## What We Did

Full Account Abstraction inside a sandbox that doesn’t let you cheat. Engineering inside Boba’s build, we put a clean abstraction layer between Boba’s AA stack and the Snap runtime up front, a sprint of cost, testable end-to-end, survived every MetaMask runtime update. The Snap itself, AA wiring, smart wallet management, all inside MetaMask’s native UX. Boba users manage Hybrid Compute smart wallets without leaving the wallet they already use.

## Outcomes

### MetaMask - Native Integration

### Smart Wallets - Hybrid Compute Enabled

Want outcomes like these on your build?

Fixed scope. Fixed deadline. Signed SoW.

[Get in touch](/contact/)

## What We Learned

Snaps are powerful but opinionated. Their permission model and sandbox force careful interface design early. The integration pushed us to build a clean abstraction layer between Boba’s AA stack and the Snap runtime, which made the whole system more testable. When that boundary fails, the [UserOperation debugger](/tools/erc-4337-useroperation-debugger/) helps freeze the exact representation locally.

## Tech Stack

- [Typescript](https://www.typescriptlang.org/)
- [MetaMask Snaps](https://metamask.io/snaps/)
- [Solidity](https://soliditylang.org/)
- [Ethers.js](https://docs.ethers.org/)

## Tags

- Account Abstraction
- MetaMask Snap
- Smart Wallet
- Layer 2

## Links & Resources

[Boba Network](https://boba.network/) [MetaMask Snaps](https://metamask.io/snaps/)

Related services

- [Blockchain Development](/services/blockchain/)
- [Custom Software Development](/services/software-development/)

Client references and trademarks

Wavect publishes these case studies about its own work. Client names, logos and trademarks are the property of their respective owners and are used here to identify the work, not to imply any partnership, sponsorship or endorsement. Each case study describes Wavect's own contribution inside a larger effort, and other parties, including the client's own teams and other vendors, contributed to the results. Figures attributed to a client are that client's own reported numbers. Figures about our work come from our records as of the review date, and we provide evidence on request. Reviews are reproduced from the platform named on each card and link to their source. We do not publish the commercial terms of any engagement, and product screenshots remain the property of the client shown. If you are named here and want a correction, a change or a removal, write to us and we will act on it: [office@wavect.io](mailto:office@wavect.io)

### [Scramble Wallet](/case-studies/scramble-wallet/)

Scramble is a multi-chain crypto wallet built to simplify self-custody. Buy, sell, and trade assets including NFTs, with cross-chain swaps and fiat on/off-ramp …

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/case-studies/metamask-snap/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-05-21",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-05-21",
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".faq-question",
          ".faq-answer"
        ]
      },
      "url": "https://wavect.io/case-studies/metamask-snap/"
    },
    {
      "@id": "https://wavect.io/verified-claims.json#metamask-snap-native-smart-wallets",
      "@type": "Claim",
      "appearance": {
        "@id": "https://wavect.io/case-studies/metamask-snap/#webpage",
        "@type": "WebPage",
        "inLanguage": "en",
        "url": "https://wavect.io/case-studies/metamask-snap/"
      },
      "author": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "dateModified": "2026-08-04",
      "identifier": "metamask-snap-native-smart-wallets",
      "inLanguage": "en",
      "text": "Wavect engineered a MetaMask Snap inside Boba Network's build, together with their team, bringing Boba Network's account abstraction and Hybrid Compute smart wallets natively into MetaMask."
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@id": "https://wavect.io/case-studies/metamask-snap/#case-study",
  "@type": "Article",
  "about": {
    "@id": "https://wavect.io/case-studies/metamask-snap/#project",
    "@type": "CreativeWork",
    "creator": {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ]
    },
    "dateCreated": "2025-01-01",
    "description": "Fullstack Build engagement",
    "funder": {
      "@type": "Organization",
      "name": "MetaMask Snap"
    },
    "name": "MetaMask Snap",
    "subjectOf": {
      "@id": "https://wavect.io/case-studies/metamask-snap/#case-study",
      "@type": "Article"
    },
    "url": "https://boba.network/"
  },
  "abstract": "MetaMask Snaps are powerful and tightly sandboxed. Strict permission model, opinionated execution context, and a boundary that runs straight through what Boba's Account Abstraction needed to do. Make smart wallet management feel native, without fighting the sandbox or teaching users anything new.",
  "author": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "datePublished": "2025-01-01",
  "description": "Boba Network's Account Abstraction enables smart wallets with Hybrid Compute, executing complex on-chain/off-chain logic in one flow. The Snap brings this natively into the world's most-used Web3 wallet.",
  "headline": "MetaMask Snap, Wavect Case Study",
  "image": "https://wavect.io/img/clients/svg/boba-network.svg",
  "inLanguage": "en",
  "isPartOf": {
    "@type": "CollectionPage",
    "name": "Wavect Case Studies",
    "url": "https://wavect.io/case-studies/"
  },
  "keywords": "Account Abstraction, MetaMask Snap, Smart Wallet, Layer 2, Typescript, MetaMask Snaps, Solidity, Ethers.js",
  "mainEntityOfPage": "https://wavect.io/case-studies/metamask-snap/",
  "mentions": [
    {
      "@type": "DefinedTerm",
      "name": "Typescript",
      "url": "https://www.typescriptlang.org/"
    },
    {
      "@type": "DefinedTerm",
      "name": "MetaMask Snaps",
      "url": "https://metamask.io/snaps/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Solidity",
      "url": "https://soliditylang.org/"
    },
    {
      "@type": "DefinedTerm",
      "name": "Ethers.js",
      "url": "https://docs.ethers.org/"
    }
  ],
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/case-studies/metamask-snap/"
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/",
      "name": "Home",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/case-studies/",
      "name": "Case Studies",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/case-studies/metamask-snap/",
      "name": "MetaMask Snap",
      "position": 3
    }
  ]
}
```
