見出し画像

[Flutter]walletconnect_dartを解説

FlutterでDappを開発する際、walletconnect_dartパッケージを使うことで、イーサリアムを基盤とした暗号資産WalletであるMetaMaskなどに簡単に接続することができます。

walletconnect_dartとは

分散型アプリ(DApp)とモバイルウォレットをQRコードのスキャンやdeeplinkを通じて接続するWalletConnectをDartで利用できます。

walletconnect_dartパッケージはEthereumをサポートしており、WalletConnectProviderから継承して必要なメソッドを実装することにより、自分自身のネットワークを簡単に追加することができます

分散型アプリの定義はこちら

分散型アプリケーション(Dapp)とは、 スマートコントラクト とフロントエンドのユーザーインターフェイスを組み合わせた、分散型ネットワーク上に構築されたアプリケーションのことです。 イーサリアムでは、スマートコントラクトはオープン API のようにアクセス可能で透明性があるため、他の人が書いたスマートコントラクトを含めることもできます。

https://ethereum.org/ja/developers/docs/dapps/

walletconnect_dartの使い方

pubspec.yamlファイルに以下を追加してパッケージを導入。
最新バージョンが0.0.11だったので walletconnect_dart: ^0.0.11と記載します。

dependencies:
  flutter:
    sdk: flutter
  walletconnect_dart: ^0.0.11

※注意
今回はwalletconnect_dartパッケージを使用しますが、web3_connectやwallet_connectといった似たような名前のパッケージもあるので間違えないように注意。

以下にウォレットとの接続を管理するコードを記載します。

import 'package:walletconnect_dart/walletconnect_dart.dart';

// WalletConnectインスタンスの作成
final connector = WalletConnect(
    bridge: 'https://bridge.walletconnect.org',
    clientMeta: PeerMeta(
      name: 'WalletConnect',
      description: 'WalletConnect Developer App',
      url: 'https://walletconnect.org',
      icons: [
        'https://gblobscdn.gitbook.com/spaces%2F-LJJeCjcLrr53DcT1Ml7%2Favatar.png?alt=media'
      ],
    ),
);

// イベントのサブスクライブ
connector.on('connect', (session) => print(session));
connector.on('session_update', (payload) => print(payload));
connector.on('disconnect', (session) => print(session));

// 新しいセッションを作成
if (!connector.connected) {
    final session = await connector.createSession(
        chainId: 4160,
        onDisplayUri: (uri) => print(uri),
    );
}

以下コード解説。

WalletConnectインスタンスの作成

connectorは、開発しているアプリとウォレットの接続を確立し、その後の通信を管理するための主要なインターフェースとなります。

bridge:
WalletConnectブリッジサーバーのURL。このサーバーは、開発中のアプリとウォレット間の通信を仲介します。
clientMeta:
あなたのアプリケーションに関するメタデータ。アプリケーションの名前、説明、URL、およびアイコンのURLが含まれます。

イベントのサブスクライブ

onメソッドを使用して、特定のイベントが発生したときに特定のアクションを発生させます。

connect:
ウォレットとの新しいセッションが確立されたときのトリガー。
session_update:
既存のセッションが何らかの方法で更新されたとき。
disconnect:
ウォレットからの接続が切断されたとき。

新しいセッションの作成

コネクタがまだ接続されていない場合(!connector.connected)、新しいセッションを作成します。
createSessionメソッドでは、以下の引数を必要とします

chainId:
接続したいブロックチェーンのチェーンID。この例では、4160というIDが指定されています。
onDisplayUri:
新しいセッションが作成されたときに呼び出されるコールバック関数。

いいなと思ったら応援しよう!