- ミント:Sequence Builderからウォレットへトークンをミント
- ウォレット認証:Web SDKを使ったユーザー認証
- ブロックチェーンクエリ:Indexerを使ったトークン残高の取得
- 複数ウォレットタイプ:ユーザーがSequence WalletまたはEOAを利用可能にする
- リクエスト作成:Sequence Market Protocolで売却リクエストを作成
- 注文の受諾:マーケットプレイスでトップオーダーを受け入れる
- (オプション) 埋め込みウォレットの有効化:確認不要の取引でよりシームレスなUXを実現
シンプルなマーケットプレイスdappの例をご覧ください。ユーザーがコレクティブルをミントし、Sequence Marketplace Protocolで販売し、
base-sepolia上でUSDCを使い、マーケットプレイスで最良注文(トップオーダー)を取得して購入できます。コードはこちらで公開しています。1. ミント
最初のステップは、Sequence Builderでコレクティブルを作成し、いくつかのトークンをミントすることです。詳しくはこちらのガイドを参照し、ミントしたtokenIdを使って今後のステップで注文のクエリや実行を行います。
2. ウォレット認証
プロジェクトには、ユーザーをウォレットで認証する仕組みが必要です。 Sequenceスタックからは、ヘッドレスかつWeb2ライクなUXを実現するEmbedded Walletか、より多様なウォレットに対応したEcosystem WalletとWeb SDKのいずれかを選択できます。 このガイドでは、Web SDK コネクタ付きの Universal Sequence Wallet(オプションで Embedded Wallet も利用可能)を使用します。GoogleやApple認証に加え、CoinbaseやMetamaskなどユーザー自身のウォレットでも認証できます。
パッケージのインストール
このようなテンプレートからバニラjs/html/cssプロジェクトを作成するか、または、ここではReactを使ってゼロからセットアップする方法をご案内します。 まず、任意のフォルダ名でプロジェクトを作成します。<project_name>フォルダで必要なパッケージをインストールします。
srcフォルダのindex.tsxの隣に、以下の内容でconfig.tsファイルを作成します。
configをindex.tsxのWagmiProviderで利用できるようにインポートします。
App.tsxにWeb SDKのモーダルを表示するボタンを追加します。
3. ブロックチェーンクエリ
コレクティブルをミントしたら、デプロイしたコントラクトのアドレスからデータを取得できます。コントラクトアドレスはここで確認できます:
tokenID を決定する際に重要になります。このデモでは、単一の tokenID を扱うものとします。
レスポンス例
レスポンス例
contractType(文字列)- コントラクトの種類(例:ERC20、ERC721、ERC1155)contractAddress(文字列)- トークンのコントラクトアドレスaccountAddress(文字列)- デプロイしたアカウントのアドレスtokenID(文字列)- トークンの tokenID(ERC20の場合は常に0)balance(文字列)- トークンの残高blockHash(文字列)- トークンがデプロイされたブロックのトランザクション・マークルハッシュblockNumber(数値)- トークンがデプロイされたブロック番号chainId(数値)- トークンのチェーンIDcontractTypechainId(数値)- トークンのチェーンIDaddress(文字列)- トークンのアドレスname(文字列)- トークンのコントラクトレベルの名称type(文字列)- コントラクトの種類(例:ERC20、ERC721、ERC1155)symbol(文字列)- トークンのシンボルdecimals(数値)- トークンの小数点以下の桁数logoURI(文字列)- sequence.app で表示されるトークンのロゴdeployed(ブール値)- トークンがデプロイ済みかどうかbytecodeHash(文字列)- ブロックチェーン上にデプロイされたスマートコントラクトのバイトコードハッシュextensionslink(文字列)- プロジェクトにリンクする関連ウェブサイトdescription(文字列)- トークンのメタデータ説明ogImage(文字列)- sequence.app で表示されるトークンのバナー画像originChainId(数値)- トークンが表す元のチェーンIDoriginAddress(文字列)- トークンが表す元のコントラクトアドレスverified(ブール値)- トークンが認証・信頼されているかどうかverifiedBy(文字列)- このトークンがスパムでないと認定した認証元
updatedAt(日付)- インデクサーが最後に更新された日時tokenMetadatatokenId(文字列)- トークンの tokenID(ERC20の場合は常に0)contractAddress(文字列)- トークンのコントラクトアドレスname(文字列)- トークンレベルの名称description(文字列)- トークンの説明image(文字列)- トークンの画像URLdecimals(文字列)- トークンの小数点以下の桁数properties(オブジェクト)- トークンメタデータのプロパティを含むオブジェクトexternal_url(文字列)- トークンや詳細情報が見つかる外部URLupdatedAt(日付)- トークンメタデータが最後に更新された日時
4. 複数ウォレットの種類
この例ではWeb SDK を使用しており、Sequenceウォレットに加えてEOAウォレットも利用できるため、ブロックチェーンへのトランザクション送信方法が異なります。Sequenceウォレットではガスコスト最適化のためにバッチトランザクションが可能ですが、wagmi でEOAを使う場合は1回に1トランザクションのみ送信できます。
これを実現するために、いくつかの手順を実行して、認証済みウォレットを確認するローカルステート変数を作成します。
Sequence Marketプロトコルでは、リスティングを作成することを
request、リクエストを受け入れることをorderと呼びます。5. リクエスト作成
この例では、コミュニティファウセット からArbitrum Sepolia USDC を使用します。
まずはそちらでトークンを取得し、リクエストを作成してリスティングできるようにしてください。
次に、オーダーブック用のリクエストを作成するには、まずマーケットプレイスのオーダーブックコントラクトにトークンの移転許可を与える必要があります。 まず、マーケットプレイスがコントラクトの承認を受けているかどうかをロジックで確認します。
useSendTransaction フックからトランザクションレシートを受け取った後、mutexでどのトランザクションのハッシュかを確認し、トランザクションを送信します。これはReactの useEffect 関数内で行います。
コンピュータプログラミングにおいて、ミューテックス(mutex)は、複数のスレッドが同じ共有リソースへ同時にアクセスするのを防ぐためのプログラム上のオブジェクトです。
6. オーダーの受け入れ
マーケットプレイスにオーダーができたので、次のことを行います:マーケットプレイスのクエリ: 受け入れたいorderIdをマーケットプレイスで検索します。通貨残高: インデクサーを使って通貨残高を確認します。トークン承認: マーケットプレイスがトークンを移転できるようにトークン承認を確認します。
マーケットプレイスのクエリ
マーケットプレイスのオーダーブックをクエリして、pricePerToken と orderId を取得します。
通貨残高
インデクサーを使って残高を確認し、ユーザーがオーダーの支払いに十分なトークンを持っているか確認します。これは次のコードで実現できます:トークン承認
次に、マーケットプレイスが通貨トークンを移転できるように承認されているか確認します。useEffect を追加します。
7.(オプション)Embedded WalletをWeb SDKに統合
Web SDKコネクタをEmbedded Wallet対応にするには、いくつかのパッケージバージョンをインストールし、ガイド冒頭で使ったconfig.ts を更新する必要があります。
Embedded Wallet機能を使うと、ユーザーによる確認不要のトランザクションが可能になり、よりスムーズなUXを実現できます。