Dapps開発において、どのウォレットに対応するかは非常に重要な論点となります。Metamaskなどのセルフカストディアルのウォレットを採用する場合、ユーザー自身が秘密鍵を管理する必要があり、これがUXの低下に繋がると指摘されることがしばしばあります。
ソーシャルログインを利用したWaaS(Wallet as a Service)を導入することで、従来のWeb2.0サービスと同等のユーザーエクスペリエンスを実現できますが、このアプローチには慎重な検討が必要です。一度特定のWaaSプロバイダーを使用し始めると、そのサービスに依存する形でベンダーロックインされてしまう恐れがあります。
本記事では、Dapps開発におけるさまざまなウォレット接続のための開発ツールを比較し、各ツールの特徴、長所、短所を検討することで、開発者やプロジェクトマネージャーがプロジェクトの要件に最も適したウォレット接続方法を選択できるように情報を提供します。
株式会社Pontechでは、Dapps開発の受託を請け負っております。本記事を通じて、ウォレット接続の選択肢に関する知識を深めるとともに、Dapps開発に関するご相談がございましたら、ぜひ当社までお問い合わせください。
ウォレット接続SDKの種類
ウォレット接続は、ユーザーエクスペリエンス(UX)に直結し、Dappsの採用と成功に不可欠な要素となります。
ウォレット接続の実装方法には大きく分けて、以下の4種類があります。
- 単体ウォレットのSDK: これは、特定のセルフカストディアルウォレット(例えばMetamaskやCoinbase Wallet)に直接接続するための開発キットです。特定のウォレットユーザー向けに最適化された機能を提供しますが、例えばMetamaskとCoinbase Walletの両方のウォレットをサポートする場合、自分でそれぞれ実装し、その整合性を取る必要があります。
- 複数の単体ウォレットから選択して接続できる統合SDK: Rainbow Kitのようなツールは、開発者がアプリケーションで複数のウォレットをサポートできるように設計されています。これにより、ユーザーは自分の好きなウォレットを選択してDappsに接続できるため、より広い範囲のユーザーを対象とすることが可能になります。
- ソーシャルログインベースのWaaS: 上記1,2が秘密鍵を自分で管理するタイプのウォレットへの接続だったのに対し、Web2.0の世界で一般的なソーシャルアカウントを紐付けたウォレットを管理してくれるWaaS(Wallet as a Service)があります。PrivyやWeb3Authなどがこれに該当し、ユーザビリティを大幅に向上させることができますが、前述の通り、サービスプロバイダーへの依存度が高まるという側面もあります。また、Metamask接続など2の機能を併せ持つ場合もあります。
- ERC4337のコントラクトウォレット: 上記1,3はEOAなのに対し、コントラクトウォレットをユーザーに付与することでUXを高める方法も考えられます。コントラクトのロジックで柔軟性を持たせられるので、例えば複数のトランザクションを1回の署名でまとめたり、送金額の上限を設けることも実現できます。ただしユーザーが署名するEOAが必要なため、1ないし3の方法でユーザーがEOAを保有した上でさらに実装することになります。
本記事では1~3について主要サービスを紹介します。4のコントラクトウォレットについては別の機会にまとめる予定です。
1. 単体ウォレットのSDK
MetaMask
- 概要: Ethereumネットワークで最も広く利用されているウォレットの一つ。ブラウザ拡張機能として利用できるほか、モバイルアプリも提供しています。
- ドキュメント: Use MetaMask SDK
Coinbase Wallet
- 概要: 世界最大級の暗号通貨取引所であるCoinbaseが提供するウォレット。セキュリティに優れ、初心者でも使いやすい設計が特徴です。
- ドキュメント: Welcome | Coinbase Cloud
Trust Wallet
- 概要: Binanceが2018年に買収したモバイルファーストのウォレットで、多様なブロックチェーンと数千種類のトークンをサポートしています。
- ドキュメント: Developing for Trust Wallet platform
これらはセルフカストディアルなウォレットのSDKの一例です。実際にこれらのSDKを使って開発するケースは稀だと思います。Coinbase Walletのドキュメントでも次項のマルチウォレットSDKの利用を推奨しています。
2. マルチウォレットを接続できる統合SDK
ウェブアプリケーション内に簡単にマルチウォレットサポートを追加できるライブラリです。ソース内で上記の単体SDKをセットアップしてくれているので、ライブラリを追加するだけで簡単に複数のウォレット接続に対応できます。
Rainbow Kit
- 概要: RainbowKitは、dappにウォレット接続を簡単に追加できる React ライブラリです。 直感的でレスポンシブでカスタマイズ可能です。
- ドキュメント: 導入 — RainbowKit
- デモ: https://www.rainbowkit.com/ja
- 対応ウォレット: Argent、Bitget、Bifrost Wallet、Bitski、Bitverse、Bloom Wallet、Bybit Wallet、Brave Wallet、Coinbase Wallet、Coin98 Wallet、Core、Dawn Wallet、Enkrypt Wallet、FoxWallet、Frame Wallet、Frontier Wallet、Gate Wallet、Ledger Live、imToken、Kresus Wallet、MetaMask、MEW Wallet、OKX Wallet、Omni、1inch Wallet、OneKey、Phantom、Rabby Wallet、Rainbow、Ramper Wallet、Ronin Wallet、Safeheron、Taho、Talisman、Tokenary、TokenPocket、Trust Wallet、Uniswap Wallet、XDEFI Wallet、Zerion (40ウォレット 2024/4時点)
- UIの日本語化: 🙆♂️
Web3Modal
- 概要: Web3ModalはWalletConnectチームが提供するウォレット接続ライブラリです。数多くのウォレットと、モバイルを含む複数のフロントエンドのフレームワークに対応しています。
- ドキュメント: Introduction | WalletConnect Docs
- デモ: https://web3modal.com/
- 対応ウォレット: Metamask、Coinbase Wallet、Trust Walletを始めとするほぼ全てのウォレット(+380ウォレット 2024/4時点)
- UIの日本語化: ❌
Web3-Onboard
- 概要: blocknativeが提供するオープンソースのフロントエンドライブラリ。
- ドキュメント: Web3-Onboard | Framework-agnostic Web3 Connect Wallet Button
- デモ: https://onboard.blocknative.com/examples/connect-wallet
- 対応ウォレット: Arcana Auth、Bitget、BitKeep、Blocto、Capsule、Coinbase、Dcent、Enkrypt、Fortmatic、Frame、Frontier、Safe、Infinity Wallet、Injected Wallets、Keepkey、Keystone、Ledger、Magic、MetaMask、MewMew Wallet、Particle Network、Phantom、Portis、Taho、Tally Ho、Torus、Trezor、UAuth、Venly、WalletConnect、Walletlink、Web3auth、XDEFI、Zeal
- UIの日本語化: ❌
ConnectKit (Family)
- 概要: ConnectKitは、あなたのdAppにウォレットを接続するための強力なReactコンポーネントライブラリです。
- ドキュメント: Connectors | Wagmi
- デモ: Try It Out
- 対応ウォレット: Metamask、Coinbase Wallet、その他はWalletConnect経由
- UIの日本語化: 🙆♂️
3. ソーシャルログインベースのWaaS (Wallet as a Service)
ソーシャルログインベースのWaaSは、GoogleアカウントやFacebookアカウントなど、Web2.0で一般的なソーシャルメディアアカウントを使用して、ブロックチェーンウォレットへのアクセスを簡単にするサービスです。これにより、ユーザーは従来のウォレット作成や秘密鍵の管理といった複雑な手順を踏むことなく、ブロックチェーンアプリケーションの利用を開始できます。
Web3Auth
- 概要: Torus Walletの開発元であるTorus Labsが開発するWaaS。対応SNSが多く、比較的老舗のため、採用しているプロジェクトが多い。
- ドキュメント: https://web3auth.io/docs/index.html
- デモ: https://demo.web3auth.io/
- 対応ネットワーク: 全EVM、Solana、XRP
- 対応SNS: X、Google、Facebook、Twitch、Discord、Apple、LinkedIn、GitHub、LINE、Weibo、Kakao、Baidu、Bitbucket、Microsoft、RenRen、Slack、Spotify、vKontakte、Yandex
- 技術: tKey、MPC
- UIの日本語化: 🙆♂️
Magic
- 概要: MagicはEmailログインを中心としたウォレット機能を提供するWaaS
- ドキュメント: https://magic.link/docs/home/welcome
- デモ: https://codesandbox.io/s/github/magiclabs/magic-connect-verification-demo?file=/src/App.js
- 対応ネットワーク: Ethereum・Polygon等の約15のEVMチェーン、Solana、Aptos、Bitcoin、FLOW
- 対応SNS: Google、Facebook、X、Apple、Discord、LinkedIn、Bitbucket、Twitch、Microsoft、GitLab
- 技術: tKey
- UIの日本語化: 🙆♂️
Privy
- 概要: OpenSeaやCourtyard.ioにも採用されたUXの良いWaaS
- ドキュメント: https://docs.privy.io/
- デモ: https://demo.privy.io/
- 対応ネットワーク: 全EVMチェーン
- 対応SNS: Google、Facebook、X、Apple、Discord、LinkedIn、GitHub、TikTok、Farcaster
- 技術: tKey
- UIの日本語化: ❌
Thirdweb Connect
- 概要: web3総合開発プラットフォームであるThirdwebの接続機能+WaaS
- ドキュメント: https://portal.thirdweb.com/connect/connect
- デモ: https://thirdweb.com/dashboard/connect/playground
- 対応ネットワーク: 全EVMチェーン
- 対応SNS: Google、Facebook、X、Apple
- 技術: tKey
- UIの日本語化: 🙆♂️
Facewallet
- 概要: 韓国発のWaaS。他WaaSではサービスごとにウォレットを生成しているのに対し、Facewalletはサービスを越えてウォレットを共通利用できる。
- ドキュメント: https://docs.facewallet.xyz/docs/overview
- デモ: https://haechi-labs.github.io/face-sample-dapp/
- 対応ネットワーク: Ethereum、Polygon、BNB、Klaytn、OASYS + 非EVMチェーン
- 対応SNS: Google、Facebook、X、Apple、Discord、Kakao
- 技術: tKey
- UIの日本語化: 🙆♂️
Dynamic
- 概要: 2. マルチウォレットを接続できる統合SDK の機能を強く持つが、WaaSの機能も持つ
- ドキュメント: https://docs.dynamic.xyz/introduction/welcome
- デモ: https://demo.dynamic.xyz/
- 対応ネットワーク: Ethereum、Polygon、Arbitrum、Optimism、Palm、Aurora、BNB Smart Chain、Gnosis、Base、Avalanche C chain、Celo、Chiliz、Fantom、Solana、Flow、Bitcoin、Starknet、Algorand、Cosmos
- 対応SNS: Google、Facebook、X、Apple、Discord、Farcaster、Twitch、GitHub
- 技術: tKey
- UIの日本語化: 🙆♂️
これらを表にまとめると以下のようになります。
まとめ・おすすめWaaS
ここまでウォレット接続周りのSDKとWaaSについてご紹介しました。
ウォレットをすでに持っているユーザー向けのサービスを展開するのであれば、マルチウォレットを接続できる統合SDKを利用してウォレット接続部分の開発を進めることができます。体感としてRainbow Kitが一番広く使われているので、とりあえず弊社もRainbow Kitを推奨いたします。
ウォレットを持たないライトユーザー向けにサービスを展開したい場合、WaaSを使うことになりますが、弊社は以下の理由からFacewalletを推奨します。
1. ウォレットがサイロ化しない
WaaSが抱える問題の1つに、ウォレットがサイロ化してしまうことがあります。例えば事業者Aがweb3Authを用いてユーザーAのGoogleアカウントに対して提供するウォレットと、事業者Bがweb3Authを用いてユーザーAのGoogleアカウントに対して提供するウォレットとでは、別のウォレットが生成されることになります。ユーザーAからすると、同じGoogleアカウントでNFTを受け取っているつもりだが、別々のウォレットにNFTが受け取られることになります。
また3rdパーティーのDappsへの接続にも課題が生じます。Dapp側は事業者のAPIキーを知らないのでweb3Authを用いたウォレットの接続をネイティブにサポートすることができません。WalletConnect経由で接続することになりますが、WalletConnectの実装は事業者側のウォレット(アプリ)側で行う必要があります。
FacewalletではDapps提供事業者に関係なく一意のアドレスがユーザーに対して紐づけられるので、上記の問題が起きません。3rdパーティーのDappsに接続するときに、どのウォレットを繋げばいいか分からないという問題を防ぐことができます。
2. 費用面
他WaaSが月額課金モデルを採用しているのに対し、Facewalletは現在無料でサービスを提供しています。将来的にはMetaMaskのようにウォレット内にSwap機能を持ちそこで収益化を図るそうで、当面はDapps提供事業者に対する課金はないそうです。継続的な売り上げが読みづらいweb3プロジェクトにおいて、この料金モデル(無料)は大きなアドバンテージだと考えます。
弊社のNFT発行サービスBenefy(ベネフィー)では、NFTの受け取り時のウォレットにFacewalletを採用しています。ぜひお試しください。