全コードは以下のリポジトリで公開しています:
- Sequence Builderコンソール登録&プロジェクト作成:Builderでプロジェクトを作成
- アクセスキー管理:Sequence Stackとやり取りするためのパブリックキー、シークレットキー、waas configキーを取得
- Embedded Wallet統合:アプリケーションにEmbedded Walletを組み込む
- コントラクトのデプロイ&ガススポンサー:アイテムコントラクトをデプロイし、ガスをスポンサーする
- Cloudflare Worker をデプロイする:ガスレスかつ確認不要なトランザクションのために Cloudflare Worker をデプロイします
- AIプロンプトと画像の生成:API経由でAIプロンプトを作成し、画像を生成してアップロードします
- メディアを Sequence Metadata サービスに保存:コレクションやトークンのメタデータを Sequence にアップロードします
- Cloudflare Worker のセキュリティ強化:外部からのリクエストを防ぐためにリファラーURLを制限します
- (オプション) 各ウォレットごとのネイティブミント制限:ウォレットごとの1日あたりのミント数を制限します
1. Sequence Builder コンソールへのサインアップとプロジェクト作成
まずはこちらの手順に従い、Sequence Builder Consoleへのサインアップ方法とプロジェクトの作成方法を確認してください。Gas Sponsoring や Transactions API など一部機能を利用するには、こちらの手順に従ってプロジェクトプランを Developer にアップグレードする必要があります。
2. アクセスキーの管理
プロジェクトが作成できたら、Sequence Stack でアプリケーションを認証するために3種類のアクセスキーを取得する必要があります。 ・Waas Config Key:Embedded Wallet 用。詳細はこちらをご覧ください。
・Public Access Key:Embedded Wallet および Transactions API 用。取得方法はこちらをご参照ください。
・Secret Access Key:Metadata Service 用。以下の手順で取得します。
Waas Config Key:Embedded Wallet 用。詳細はこちらをご覧ください。Public Access Key:Embedded Wallet および Transactions API 用。取得方法はこちらをご参照ください。Secret Access Key:Metadata Service 用。以下の手順で取得します。
シークレットアクセスキーの作成
1
設定画面を開く
まず設定画面にアクセスし、API Keys を選択します。

2
サービスアカウントの追加
下にスクロールして
+ Add Service Accountを選択します。
3
書き込み権限の選択
アクセス権限を 
最後に
Write と Confirm に変更します。
copy をクリックし、キーを安全な場所に保管してください。なお、Builder Console からは今後再確認できません。3. Embedded Wallet の統合
テンプレートリポジトリはこちらから閲覧やクローンができます。
mkdir <project> でプロジェクトフォルダを作成し、cd <project> で移動後、React を使って vite プロジェクトを作成します:
/src ディレクトリ内に作成してください。
まず SequenceEmbeddedWallet.ts などの名前でファイルを作成し、以下の初期化コードを記述します:
useSessionHash.ts ファイルを作成します:
GoogleOAuthProvider でラップする必要があります。以下のコマンドで、後ほど利用する Apple Auth サインインも含めてインストールします:
main.tsx ファイル内で先ほどインポートしたファイルを使い、スターターコードを実装します:
main.tsx の準備ができたら、次はログインボタンを作成します。見た目は以下のようになります:

App.tsx では、ユーザーが接続されているかを確認し、サインインしたユーザーに基づいてウォレットアドレスを表示するコードと、各種ソーシャル認証ボタンやハンドラーを実装します:
.env ファイルを作成し、.gitignore に追加したうえで、Sequence Builder から取得した以下の値でファイルを更新します:
4. コントラクトのデプロイとガススポンサー設定
AI生成画像を任意のトークンのメタデータに紐付けるため、トークンコントラクトをデプロイします。コントラクトのデプロイにはERC1155 の利用を推奨します。ERC721 よりも ERC1155 を使う利点については以下で説明します。
- セミファンジブル:同じアイテムの複数コピーを持つゲーム資産などに最適です。
- ガスコスト削減:複数のトークンが必要なプロジェクトでは、1つのERC1155で多様なトークンタイプを管理できます。
wrangler.tomlにCONTRACT_ADDRESSを設定してください。
ミント機能をプログラムで実行し、リレイヤーのトランザクションをガスレスにするには、アップグレードした請求プランのアカウントクレジットから Transactions API が利用できるよう、デプロイしたスマートコントラクトアドレスをスポンサー登録する必要があります。
Transactions APIで手数料なしにトランザクションを中継できるようにするには、このガイドに従って、デプロイ済みコントラクトのガススポンサー設定を行ってください。
すべての Sequence テストネットは無料です。
5. Cloudflare Worker で Transactions API をデプロイ
前のステップに続き、Sequence Transactions API をサーバーレスな Cloudflare Worker 上で実装することで、ゲームやアプリのユーザー操作時に確認署名やガス支払いなしでシームレスに処理できます。この場合、Worker は Sequence Transactions API を利用してユーザーアドレスへトークンをミントします。トランザクション速度やスループット、リオーグなどを気にせず、Cloudflare による自動スケーリングの恩恵も受けられます。トークンのミント
Cloudflare Worker をゼロからデプロイする方法が必要な場合は、こちらのガイドでデプロイ済みERC1155 コントラクトを使ったサーバーレスNFTミントサービスの構築方法を確認するか、本ガイド専用のテンプレートをクローンしてください。
セットアップが完了したら、後のステップでNFTをミントするために、Cloudflareインスタンスのエンドポイントを呼び出します。
6. AIプロンプトと画像の生成
AI画像生成を始めるには、メディアを作成するためのAIモデルプロンプトが必要です。本ガイドおよびデモでは、Diabloゲーム内のアイテムからプロンプトを取得しています。 テンプレートには、すでにデプロイ済みAPIを呼び出すコードとレスポンスを解析するコードが含まれています。 このAPIを使い、Cloudflare Worker 内のgenerate 関数でデプロイ済み Diablo API のプロンプトを利用して画像を生成する方法を紹介します:
name と type を含む prompt、および追加のモデルパラメータ(Scenario API ドキュメントでカスタマイズ可能)を渡す getInferenceWithItem 関数を完成させます:
本ガイドでは、品質と時間のバランスから Scenario API の
EulerDiscreteScheduler スケジューラータイプを採用していますが、他のスケジューラーも試したい場合はこちらのカスタムローカルCLIを利用し、Scenario.gg ダッシュボードで結果を確認できます。inferenceId を取得したら、推論ステータスをポーリングし、succeeded ステータスになった時点で完了として返します。
inferenceId を渡します。レスポンスを受け取ったら、resObject.inference.images[0].url で画像のURLを取得できます:
なお、1つのプロンプトで複数の画像を返すアプリケーションを設計し、ユーザーがその中から適切な生成画像を選択できるようにすることも可能です。
7. Sequence Metadata Service へのメディア保存
Scenario APIから取得したメディアのurlを使い、次はそのアセットをSequence Metadata Serviceに保存します。これにより、AI生成画像を特定のトークンメタデータに紐付けることができます。これらはすべてREST-API経由で実現できます。
Dungeon Minterの宝箱報酬はすべて同じプロセスに従い、まずSequence Metadata APIを使ってメタデータを保存し、urlとランダムに生成されたtokenID(これにより並列リクエストが可能)がクライアントに返されます。その後、ユーザーがコレクティブルを確認し、ミントに同意した後、tokenIDとユーザーのaddressがステップ5で作成したワーカーに返され、ミント処理が行われます。
実装方法
こちらのガイドを完了し、統合して、Cloudflare Workersを活用したSequence Metadata APIベースのサーバーレスメディアサービスを構築してください。または、このガイド用のCloudflareテンプレートをクローンして利用できます。 完了したら、保存したメディアのtokenIDとurlをフロントエンドに渡し、ユーザーがミントする前に内容を確認できるようにします:
8. Cloudflare Worker を使ったミント処理
最後のステップは、先ほどメタデータを紐付けたtokenIdをユーザーのアドレスにミントすることです。ここでは、ステップ5で作成したCloudflare Workerにリクエストを送り、ユーザーにトークンをミントします。
request.headersのReferrer値をwrangler.tomlのCLIENT_URLと比較することで簡単に制御できます。
まとめ
このチュートリアルで行った内容を振り返りましょう: Sequenceプロジェクトの作成方法と、APIスイートへのアクセス方法を解説しました。サンプルのダンジョンクローラーゲーム向けに、スムーズなプレイ体験を提供するための埋め込み型ウォレットの導入・設定も行いました。また、Sequenceプラットフォームを活用してコントラクトをデプロイし、ユーザー体験を簡素化するためにガス代をスポンサーしました。さらに、Sequence Transaction APIを使ったサーバーレスNFTミンターをデプロイし、数百万規模のプレイヤーに対応しつつ、リオーグのような複雑なブロックチェーン処理も可能にしました。加えて、scenario.gg APIを利用して、プレイヤーへの報酬となるゲームアセットを動的に生成しました。これらの画像をSequence Metadata APIでNFTのメタデータに紐付けました。これで、Scenario.ggとSequenceを活用したゲームでAIアートをミントする方法が理解できたはずです。 スケーラブルで安全、そして楽しいブロックチェーン対応ゲームを作るには多くの要素が必要ですが、SequenceプラットフォームとScenarioがあれば安心です。 最後に、上記すべてのステップを組み込んだ完全な体験を、ダンジョンクローラーゲームで実際に体験できます。迷路に挑戦して、自分だけの戦利品を手に入れましょう。 開発を楽しんでください!9.(オプション)ウォレットごとのネイティブミント制限
特定ウォレットによる宝箱ミントの過剰利用を防ぐため、wrangler.tomlでDAILY_MINT_RESTRICTIONというパラメータを設定し、1日あたりの最大ミント数を制限できます。また、必要に応じてプロトコルにADMINを追加し、無制限にミントできる権限を持たせることも可能です。
これらの機能は、以下の手順でコードに実装できます:
hasDailyMintAllowanceは2つの関数に分かれています:
- ユーザーの
addressのトランザクションを1日分ページネーションで取得するfullPaginationDay fromが0xアドレスであることに対応するmintCount
インデクサーによる1日分の全ページネーション取得
補足ですが、Sequence Indexerスタックはこの期間中のトランザクションを30日分のみ保持しているため、1日から最大30日まで期間を拡張できます。
pnpm install @0xsequence/indexerが必要です。
実装時は、インデクサーから最初のトランザクションバッチとpage.after値を取得し、whileループでタイムスタンプが24時間未満かどうかを継続的にチェックしながら、一時配列に追加していきます。これにより、利用可能なすべてのトランザクションを取得できます:
1日分のミント数取得
ERC721およびERC1155標準のSequenceコントラクトからミントされたすべてのコレクティブルは、fromが0xアドレスとなります: