---
title: "Afoma"
canonical: https://wavect.io/zh/case-studies/afoma/
language: zh
description: "Afoma 是一个正在向 Web3 扩展的现有 marketplace。客户希望叠加链上原语，但不能破坏那些不知道钱包是什么的用户的体验。"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

[← 所有案例研究](/zh/case-studies/)

![Afoma logo](/img/clients/webp/afoma.webp)

案例研究 · 2024

Afoma

# 把 Web3 加到一个上线中的 marketplace，用户从未看到加密。

Afoma 是一个正在向 [Web3](/zh/glossary/web3/) 扩展的现有 marketplace。客户希望叠加链上原语，但不能破坏那些不知道钱包是什么的用户的体验。

[“他们的交付速度给我们留下了深刻印象。” Eric Osuorah Clutch](https://clutch.co/go-to-review/f2290100-9e13-4140-a1b0-0ee301a5fd39/477125)

BLOCKCHAIN Web3 集成与咨询 2024 上线

速览

项目类型 Web3 集成与咨询

行业 [Web3 / Marketplace](/zh/industries/ecommerce/)

阶段 种子轮

项目规模 固定价格

年份 2024

技术栈

Typescript Solidity Ethers.js

状态 上线

实例 [afoma.io](https://afoma.io/)

## 概览

Afoma 是一个正在向 [Web3](/zh/glossary/web3/) 扩展的现有 marketplace。客户希望叠加链上原语，但不能破坏那些不知道钱包是什么的用户的体验。

## 挑战是什么？

把 Web3 加进一个上线中的 marketplace 通常不是难点。让它对非加密用户感觉自然才是。集成必须降低 onboarding 门槛：能直接工作的社交登录、藏在熟悉认证背后的钱包创建、流程中零加密术语。同时不能扰动已经在跑的部分。

## 我们做了什么决定？

### 把现有用户迁移过来是不可妥协的。

> 社交登录并不是全部工作。已有用户必须迁到新的认证流程，账户、历史与信任都不能丢。在那里一旦断裂，造成的流失是任何链上功能都补不回来的。我们把迁移当作一等交付物：两套认证并行、首次社交登录时静默创建钱包、零强制重新注册。链上层上线了。现有用户几乎没察觉。

## 我们做了什么

上线中的 marketplace，加一层链上而不让用户察觉接缝。我们从 Web3 社交登录开始，而不是钱包连接器，熟悉的认证把用户带过边界，钱包在背后悄悄创建。社交登录驱动的 onboarding、marketplace 之下的链上接入，以及 Web3 战略与产品方向的持续咨询。高级用户的钱包功能推后。现有用户群无需再培训就能继续使用。

## 成果

### Web3 社交登录 - 已上线

### 非加密 - 友好 UX

想让你的项目也拿到这样的成果？

范围固定。期限固定。已签 SoW。

[联系我们](/zh/contact/)

## 精选界面

![Afoma, screen 1](/img/case-studies/afoma/001_hu_c6b3915623b39d52.webp)

![Afoma, screen 2](/img/case-studies/afoma/002_hu_c817ffa2ed256e3f.webp)

![Afoma, screen 3](/img/case-studies/afoma/003_hu_c89f25eaf60b10d5.webp)

![Afoma, screen 4](/img/case-studies/afoma/004_hu_d8c8cd62f9382ed1.webp)

![Afoma, screen 5](/img/case-studies/afoma/005_hu_47fb12f7488a2000.webp)

## 客户评价

[Clutch · Verified](https://clutch.co/go-to-review/f2290100-9e13-4140-a1b0-0ee301a5fd39/477125)

> **他们的交付速度给我们留下了深刻印象。**

WAVECT GmbH 成功为终端用户分配了 Web3 钱包，用户对整个迁移过程印象深刻。团队按时交付，专业度很高，并通过线上会议、电子邮件和即时通讯应用保持了顺畅沟通。

Eric Osuorah AFOMA Marketplace 首席执行官

想要同样的影响力？

范围固定。期限固定。已签 SoW。

[联系我们](/zh/contact/)

## 经验总结

丢失非加密用户最快的方式：让他们觉得自己在用加密。Web3 层必须消失在既有 UX 里，而不是焊在它旁边。社交登录是正确的入口：marketplace 流程完整、链上门悄悄打开。

## 技术栈

- [Typescript](https://www.typescriptlang.org/)
- [Solidity](https://soliditylang.org/)
- [Ethers.js](https://docs.ethers.org/)

## 标签

- Web3
- Marketplace
- 社交登录

## 链接与资源

[Afoma](https://afoma.io/)

相关服务

- [区块链开发](/zh/services/blockchain/)
- [定制软件开发](/zh/services/software-development/)

客户引用与商标

Wavect 发布这些案例研究，讲述的是我们自己的工作。客户名称、标识和商标归各自所有者所有，在此仅用于标识相关工作，并不表示任何合作、赞助或背书关系。每个案例描述的是 Wavect 在一项更大工作中的自身贡献，客户自己的团队以及其他服务商也共同促成了这些结果。归属于客户的数据是该客户自行提供的数字。关于我们工作的数据来自我们在页面所示核查日期的记录，可按要求提供证据。评价均转载自各卡片所标注的平台，并链接至原始来源。我们不公开任何合作的商业条款，产品截图的权利仍属于所展示的客户。如果你被列在此处，希望更正、修改或撤下相关内容，请写信给我们，我们会处理： [office@wavect.io](mailto:office@wavect.io)

### [Account Abstraction](/zh/case-studies/account-abstraction/)

Boba Network 的混合计算让智能合约能在单笔交易内触发类似预言机的链下计算，并可信地将结果返回链上。它是 Boba 账户抽象模型的核心，也是相较于标准 L2 的关键差异。

## 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/zh/case-studies/afoma/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-05-21",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-05-21",
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".faq-question",
          ".faq-answer"
        ]
      },
      "url": "https://wavect.io/zh/case-studies/afoma/"
    },
    {
      "@id": "https://wavect.io/verified-claims.json#afoma-invisible-wallet",
      "@type": "Claim",
      "appearance": {
        "@id": "https://wavect.io/zh/case-studies/afoma/#webpage",
        "@type": "WebPage",
        "inLanguage": "zh",
        "url": "https://wavect.io/zh/case-studies/afoma/"
      },
      "author": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "citation": {
        "@type": "WebPage",
        "url": "https://clutch.co/go-to-review/f2290100-9e13-4140-a1b0-0ee301a5fd39/477125"
      },
      "dateModified": "2026-08-04",
      "identifier": "afoma-invisible-wallet",
      "inLanguage": "en",
      "text": "On Afoma, a live marketplace, Wavect layered on-chain primitives behind social login and invisible wallet creation, so the user never sees crypto jargon."
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@id": "https://wavect.io/zh/case-studies/afoma/#case-study",
  "@type": "Article",
  "about": {
    "@id": "https://wavect.io/zh/case-studies/afoma/#project",
    "@type": "CreativeWork",
    "creator": {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ]
    },
    "dateCreated": "2024-01-01",
    "description": "Web3 集成与咨询 engagement",
    "funder": {
      "@type": "Organization",
      "name": "Afoma"
    },
    "name": "Afoma",
    "subjectOf": {
      "@id": "https://wavect.io/zh/case-studies/afoma/#case-study",
      "@type": "Article"
    },
    "url": "https://afoma.io/"
  },
  "abstract": "把 Web3 加进一个上线中的 marketplace 通常不是难点。让它对非加密用户感觉自然才是。集成必须降低 onboarding 门槛：能直接工作的社交登录、藏在熟悉认证背后的钱包创建、流程中零加密术语。同时不能扰动已经在跑的部分。",
  "author": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "datePublished": "2024-01-01",
  "description": "Afoma 是一个正在向 Web3 扩展的现有 marketplace。客户希望叠加链上原语，但不能破坏那些不知道钱包是什么的用户的体验。",
  "headline": "Afoma, Wavect Case Study",
  "image": "https://wavect.io/img/clients/webp/afoma.webp",
  "inLanguage": "zh",
  "isPartOf": {
    "@type": "CollectionPage",
    "name": "Wavect Case Studies",
    "url": "https://wavect.io/zh/case-studies/"
  },
  "keywords": "Web3, Marketplace, 社交登录, Typescript, Solidity, Ethers.js",
  "mainEntityOfPage": "https://wavect.io/zh/case-studies/afoma/",
  "mentions": [
    {
      "@type": "DefinedTerm",
      "name": "Typescript",
      "url": "https://www.typescriptlang.org/"
    },
    {
      "@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/zh/case-studies/afoma/"
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/case-studies/",
      "name": "案例研究",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/case-studies/afoma/",
      "name": "Afoma",
      "position": 3
    }
  ]
}
```
