メインコンテンツへスキップ
所要時間:20〜30分 Sequence Transactions API はサーバーレスの Cloudflare Worker 上で実装でき、ゲームやアプリのユーザーは確認サインやガス代の支払いなしでシームレスに利用できます。また、リレイヤーによるトランザクション速度やスループット、再編成を心配する必要がなくなり、Cloudflare による自動スケーリングも利用できます。 以下のステップで、ホスト型ミンター API を 4 ステップで構築する方法をご案内します。
  1. Wrangler Cli で Cloudflare 環境をセットアップしテストをデプロイする
  2. Sequence Builder で ERC1155 コントラクトをデプロイ、スポンサー登録、およびメタデータの更新
  3. EthAuthProof を使って EOA DDoS を防ぐ
  4. コレクティブルをウォレットにミントする
結果として、以下の仕様を持つセキュアな API が完成します。
  • HTTPS GET:blockNumber を返す
  • HTTPS POST(proof, address):コレクティブルをミントし、トランザクションハッシュを返す
この実装を完了するには、wrangler cli、npm、Sequence Builder の基本知識が必要です。

1. Wrangler Cli で Cloudflare 環境をセットアップしテストをデプロイする

まず、mkdirでディレクトリを作成し、cdでそのディレクトリに移動し、pnpm initpackage.jsonを作成します。 次に、プロジェクトに wrangler cli がインストールされていることを確認し、wrangler キーワードをローカル bash セッションのエイリアスとして設定します。
Cloudflareサイトでアカウントを作成し、ログインしてCloudflareダッシュボードにアクセスし、Cloudflareプラットフォームをローカル開発環境と接続します。
ログイン後、ディレクトリ内でプロジェクトを初期化し、気に入ったランダム生成のプロジェクトフォルダ名を選択して、git で管理されている TypeScript の "Hello World" Worker アプリケーションを初期化するプロンプトに従ってください。
このステップを完了するには、wrangler init後にエンターを4回押し、最後の2つの質問にはNoと答えてgitバージョン管理とデプロイをスキップしてください。 これにより、クラウドにコードをデプロイできるスターターリポジトリがクローンされます。
ローカル API テスト
ガイドの任意のタイミングで、プロジェクトフォルダ内で wrangler dev コマンドを使ってローカルテストを実行できます。

デプロイテスト

最後に、ランダムに生成されたプロジェクトフォルダにcdで移動し、wrangler deployコマンドを実行します。 これによりURLが表示されるので、ブラウザでhttps://<app>.<account>.workers.devにアクセスし、「Hello World!」の結果を確認できます。

2. Sequence Builder で ERC1155 コントラクトをデプロイ、スポンサー登録、およびメタデータの更新

Transactions API を利用するには、Sequence Builder でプロジェクトの課金プランを Developer にアップグレードする必要があります。こちらの手順 をご参照ください。
まずはこのガイドに従ってコントラクトをデプロイしてください。 次に、Sequence Builder でコントラクトのロールアクセスを2つの手順でミンターウォレットアドレスからのみリクエストを受け付けるように設定します。 Sequence Builderで minter permissionSequence Wallet Transactions API Address に付与してください。 利用する transactions API アドレスを知るには、まず以下のいずれかの方法で取得します。
  1. このアプリ を使い、ネットワークを選択して generate local wallet ボタンでウォレットキーを生成することで取得できます(デモ目的でのみご利用ください)。
  2. 推奨: 以下のコードスニペットを使い、EOA ウォレットの秘密鍵から生成されたアカウントアドレスをローカルで出力することもできます。
プロジェクトを開き、Contracts ページに移動し、Linked contracts を選択、Write Contract タブで grantRole メソッドを展開します。 以下の情報で入力してください。 bytes32 role: 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6 address account: <Generated Sequence Transactions API Wallet Address>
リレイヤーにロールを付与する
ここで入力する role 文字列は、solidity では keccak256("MINTER_ROLE")、javascript では ethers.keccak256(ethers.toUtf8Bytes("MINTER_ROLE")) の結果です。 これにより、特定のアドレスのみがコントラクトからミントできるようになり、それ以外はエラーとなります。 write をクリックし、スポンサー付きトランザクションに署名してロールの更新を完了してください。

メタデータの更新

次に、コントラクトのメディアやアセットなどのメタデータを更新する必要があります。このガイドに従って設定できます。

コントラクトのスポンサー登録

最後に、コントラクトをスポンサーするにはこのガイドを参考にしてください。

3. EthAuthProof を使って EOA DDoS を防ぐ

コントラクトのデプロイが完了したら、Cloudflare Worker のディレクトリとプロジェクトに戻り、ethers0xsequence をインストールして Sequence API にアクセスし、リクエストが信頼できる Sequence ウォレットから来ているかどうかの証明を検証します。
次に、POST か GET かを判定後、ミドルウェアを追加してください。POST リクエストの場合は、渡された proofStringaddress、および環境変数が有効かどうかを検証します。 src/index.ts に配置するコードの雛形はこのようになります。callContractgetBlockNumber はモック化されており、コントラクト呼び出し前に verify を呼ぶ検証ステップが含まれています。

Cloudflare 環境変数の追加

次に、wrangler.toml[vars] セクションを更新してビルド用の環境変数を渡します。

Wrangler テンプレートで Window オブジェクトを実装する

なお、デプロイしようとすると、web3モジュールで必要な window オブジェクトが見つからないというエラーが発生します。 これを防ぐには、wrangler.toml ファイルに以下の行を追加し、環境を対応させてください。

デプロイのテスト

wrangler deploy を使用して再デプロイできます。 次に、以下のように curl リクエストでエンドポイントをテストします。
このdappを利用し、以下の手順でウォレットアドレスの証明を取得します。

ETHAuthProof Viewer dapp の利用

ページにアクセスしたら、最初にネットワークを選択してください。 次に、「接続してProof(証明)を生成」または「ローカルウォレットを生成」のいずれかを選択できます。
ETHAuthProof Viewer
connect ボタンを押し、その後 copy to clipboard をクリックしてください。
ETHAuthProof Viewer copy to clipboard
なお、この ETHAuthProof を他人と共有しないことをおすすめします。これを共有すると、他人があなたのウォレットの所有者であることを証明し、特定のAPIとやり取りできてしまいます。 最後に、urlこの手順で取得したアプリのものに、<some_proof>をビューワーアプリからコピーした生成値に、<some_address>をご自身のウォレットアドレスに置き換えてください。これで、モックされた0x文字列が返されます。

4. コレクティブルをウォレットにミントする

スポンサー付きコントラクトアドレスからコレクティブルをデプロイ・ミントするには、以下のパッケージをインストールします。
そして、以前モックしていた callContractgetBlockNumber メソッドを次のように実装します:
これらの手順が完了したら、前の手順に従って再デプロイおよびテストできます。今回は、POSTリクエストでミント完了のトランザクションハッシュが返り、GETリクエストではブロック番号が返されるはずです。 全コードを確認したい場合は、こちらの実装例をご覧ください