msg.senderがSequence Relayersウォレットアドレスのいずれかになる点です。Sequence Builder標準コントラクトでは、リレートランザクションAPIリクエストと組み合わせれば問題ありません。
デフォルトでは、Sequenceのトランザクションは順番に実行されます。
- Expressライブラリを使って、HTTPリクエストを受け付けるNodeJsベースのサーバーを作成します。
- プロジェクトとアクセスキーの管理:Sequenceスタックと連携するためのパブリックアクセスキーを発行します。
- コレクティブルコントラクトのデプロイ:ウォレットアドレスへトークンをミントするために、コレクティブルコントラクトをブロックチェーン上にデプロイします。
- Transactions APIを使ったスポンサー付きリレイヤーの構築:Expressのルートで利用する関数を作成し、スポンサー付きコントラクトからSequence Transactions APIを呼び出します。
- (オプション)ウォレット保有通貨によるリレー:Expressのルートで利用する関数を作成し、ウォレットが保有する通貨でSequence Transactions APIの支払いを行います。
- (オプション)並列トランザクションのリレイヤー:通貨を送信するためにトランザクションのバッチ処理を行います。
1
Expressサーバーによる環境構築
以下のコマンドで こちらのExpressテンプレートコード をクローンします。コードをローカル環境に配置したら、以下のコマンドでサーバーとクライアントを起動します。コード内には 次のような出力が表示されるはずです。
pnpm(または他のNodeパッケージマネージャ)がインストールされていることを確認してください。Expressは、Webおよびモバイルアプリケーション向けの堅牢な機能を提供する、最小限かつ柔軟なNode.jsウェブアプリケーションフレームワークです。本ガイドで使用します。
/mint というルートが含まれており、CLIからテスト用に呼び出すことができます。以下の例のcurlリクエストで試してみてください。2
プロジェクトとアクセスキーの管理
まずはこちらの手順に従い、Sequence Builderへのサインアップ方法やプロジェクト作成方法をご確認ください。次に、Transactions APIを利用するためには、こちらの手順に従ってBillingを
Developer にアップグレードする必要があります。最後に、Transactions APIには Public Access Key が必要です。こちらの手順に従って取得してください。最後に、.env.example を .env にリネームしてから、以下の内容で更新してください。3
コレクティブルコントラクトのデプロイ
このチュートリアルに従って、コレクティブルコントラクトをデプロイしてください。最後に、デプロイしたコレクティブルコントラクトの情報で まず、ステップ1で用意したテンプレートコードにいくつかのパッケージを追加します。次に、サーバーにはメッセージに署名できるEOAウォレットが必要です。このウォレットがサーバー側Sequenceウォレットの所有者となり、トランザクションの送信に利用されます。最後に、こちらのアプリで生成できるウォレットのプライベートキーを 
ここで入力する
テストネット以外を利用し、コントラクトのスポンサーが必要な場合は、こちらの手順に従って実行できます。
.env を更新してください。Transactions APIによるスポンサー付きリレイヤーの構築
このセクションの全コードはこちらで確認できます。
セッションを開始すると、Sequenceウォレットが新しいバージョンにマイグレーションされる場合があります。例えば、
v1 から v2 への移行、または将来のバージョンへの移行が含まれます。マイグレーションは一方向のみであり、一度ウォレットが移行されると以前のバージョンには戻せません。予期しないマイグレーションを検知するには、onMigration コールバックを利用できます。callContract 関数を実装するには、以下のように単一の署名者でトランザクションをリレーするコードを追加してください。.env に設定してください(これはデモ用です)。本番環境では、ご自身のPC上で安全にプライベートキーを生成することを推奨します。次に、取得したキーをPKEY変数に設定してください。リレイヤーウォレットアドレスへのMinterロール付与
コントラクトのロールアクセスをBuilderで更新し、ミンターウォレットアドレスからのみリクエストを受け付けるようにします。Sequence Builderでminter permission を Sequence Wallet Transactions API Address に付与してください。プロジェクトを開き、Contracts ページに移動し、Linked contracts を選択、Write Contract タブで grantRole メソッドを展開します。以下の情報で入力してください。bytes32 role: 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6address account: <Generated Sequence Transactions API Wallet Address>
role 文字列は、solidityでは keccak256("MINTER_ROLE")、javascriptでは ethers.solidityPackedKeccak256(ethers.toUtf8Bytes("MINTER_ROLE")) の結果です。これにより、特定のアドレスのみがコントラクトからミントできるようになり、それ以外はエラーとなります。write をクリックし、スポンサー付きトランザクションに署名してロールの更新を完了してください。これで、クライアントフロントエンドでウォレットにサインインし、「ミント」をクリックしてテストトランザクションを送信できます。お試しください。クライアントの
initWallet 関数でアクセスキーを更新することも忘れないでください。