メインコンテンツへ移動
AIチュートリアル

FastMint FCFS:Binance Agentic Walletで時間厳守のBSCミントを実行

fastmint-fcfsの導入方法と使い方を解説します。同期クロック、ブロックチェーンの最新ヘッド、RPCシミュレーションでセール開始を検知し、安全確認を行ったうえでBinance Agentic Walletのトランザクションを1件プレビューして実行するAIエージェントスキルです。

FastMint FCFS:Binance Agentic Walletで時間厳守のBSCミントを実行

fastmint-fcfsの機能

fastmint-fcfsは、Claude Code、Codex、Cursor、OpenClawなどのAIエージェント向けのスキルです。BNB Smart Chainでセールが開始された直後に、単一のミント、クレーム、または購入トランザクションを実行できます。

このツールはBinance Agentic Walletのbaw CLIを使用します。マシン上でcalldataを準備し、リクエストを送信するタイミングを選択します。一方、トランザクションの署名はDeveloper Modeを通じてBinanceのバックエンドで行われます。秘密鍵、シードフレーズ、セッショントークンがマシンに保存されることはありません。

Binanceのウォレットフローでは、contract-call previewの後にcontract-call executeが必要なため、fastmint-fcfsはこれらの手順のタイミングを最適化します。単一のシグナルを待つ代わりに、複数の独立したトリガーを使用します。

  • クロックトリガー: NTPで補正された時計を使い、セール時刻に発火します。
  • ヘッドトリガー: タイムスタンプが開始時刻に達する最初のBSCブロックを監視します。
  • シミュレーショントリガー: 利用可能な最速のRPCエンドポイント間でeth_callリクエストを競合させます。

最初に成功したプレビューを正確に1回実行します。処理中の他のプレビューは無視されます。

このツールは、特定のミントについてユーザーから明示的な指示を受けた場合にのみ使用してください。URLだけではトランザクション送信の承認になりません。

前提条件とインストール

必要なソフトウェアをインストールする

Node.js 20以降を使用してください。リポジトリにはethers 6.13が同梱されているため、プロジェクト自体でnpm installを実行する必要はありません。Binance Agentic Wallet CLIをグローバルにインストールします。

npm install -g @binance/agentic-wallet@1.12.0

BinanceアプリでAgentic WalletとDeveloper Modeを有効にします。ウォレット残高がDeveloper Modeの上限を下回った状態を維持してください。オプションのBinanceウォレットスキルを使うと、追加のウォレット操作をサポートできます。

エージェントが読み取れる場所にスキルを配置する

リポジトリを展開し、fastmint-fcfsディレクトリをエージェントが使用するスキルディレクトリにコピーします。

# Claude Code、プロジェクト単位
mkdir -p .claude/skills
cp -r fastmint-fcfs .claude/skills/

# Claude Code、グローバル
mkdir -p ~/.claude/skills
cp -r fastmint-fcfs ~/.claude/skills/

# Codex、Cursor、その他の.agents対応ツール
mkdir -p .agents/skills
cp -r fastmint-fcfs .agents/skills/

chmod +x fastmint-fcfs/fastmint.sh

ウォレットにサインインする

ターミナルから一度サインインします。

baw auth signin --json

返されたurlForWebを開き、表示されたpairingCodeをBinanceアプリで照合して接続を承認します。その後、セッションを確認します。

baw auth verify --qrCodeId <qrCodeId> --json
baw wallet status --json

ウォレットのステータスはCONNECTEDでなければなりません。セッションは、操作がない状態で最大48時間有効です。セッションが期限切れになった場合、エージェントは停止し、自動的に認証を試みるのではなく、再度サインインするよう求めなければなりません。

環境を確認する

プロジェクトディレクトリに移動し、読み取り専用のベンチマークを実行します。

cd fastmint-fcfs
./fastmint.sh bench

ベンチマークでは、RPCランキング、WebSocket遅延、NTPクロックオフセット、ウォレット接続、Developer Mode、BNB残高、Agent ID、プレビューのタイミングを確認します。ミントをスケジュールする前の初期診断として役立ちます。

macOSでNodeが証明書チェーンを検証できない場合、プロジェクトはシステムキーチェーンからCAバンドルを構築できます。

./fastmint.sh bench --ca

その他の環境では、NODE_EXTRA_CA_CERTSに適切なCAファイルを設定してください。

オプションのRPCエンドポイントを設定する

ランチャーはスキルディレクトリにある.envファイルを自動的に読み込みます。プレミアムHTTPおよびWebSocketエンドポイントを追加できます。

FASTMINT_RPCS_EXTRA=https://<premium-endpoint>
FASTMINT_WS_EXTRA=wss://<premium-endpoint>

その他に、RPCプール全体を置き換えるFASTMINT_RPCS、WebSocketエンドポイントを設定するFASTMINT_WS、ローカルタイムゾーンを設定するFASTMINT_TZ、Node証明書バンドルを指定するFASTMINT_CAがサポートされています。ログ内のエンドポイントホストはマスクされます。

推奨される使用フロー

通常の実行は、環境のベンチマーク、ミントコントラクトの調査、プレビューのリハーサル、実際のトランザクションの実行という4段階で構成されます。

  1. Bench: ウォレットとネットワーク環境の準備が整っていることを確認します。
  2. Recon: コントラクトアドレス、ABI、ミント関数、引数、タイミング、関連するgetterを特定します。
  3. Dry-run: プレビューを送信しますが、実行前に停止します。
  4. Fire: トランザクションエンジンを実行し、プレビューがすべてのチェックを通過した後に1回だけ実行できるようにします。

1. ミントサイトを調査する

ミントページに対してreconを実行します。

./fastmint.sh recon https://mint-site

コントラクトアドレスがすでに分かっている場合は、直接指定します。

./fastmint.sh recon https://mint-site --contract 0x...

Reconはページと関連するJavaScriptまたはエージェントドキュメントをダウンロードし、コントラクトアドレス、チェーンID、関数名、ABIシグネチャ、タイムスタンプを検索します。また、デプロイ済みバイトコードを検証し、利用可能な場合はSourcifyからABIを取得し、view関数を読み取り、推測した引数、calldata、シミュレーション結果、開始予定時刻を含むミント候補を表示します。

出力を使って、開始時刻、価格、無料供給量、ウォレットごとの上限、Agent ID要件、デコードされたコントラクトエラーを確認してください。推測された引数は、確認せずに使用しないでください。

2. プレビューをリハーサルする

fire --dryを使用すると、トランザクションを実行せずにチェックとプレビューを行えます。

./fastmint.sh fire --to 0xSALE --data 0x195ad114 --start 23:00 --dry

--startオプションには、Unix秒、ローカルのHH:MM[:SS]時刻、またはISO-8601タイムスタンプを指定できます。表示されたcall値を確認し、セレクターと引数が意図した関数を表していることを確認してください。

時間制限付きのパスを実際に通るリハーサルを行うには、--gateSimを追加します。これにより、すでに成功しているeth_callによって、設定した開始時刻より前にリハーサルが実行されるのを防ぎます。

3. 1回のミントを実行する

ドライランを確認し、明示的な承認を受けた後、エージェントの応答性を維持するため、バックグラウンドでトランザクションを実行します。

./fastmint.sh fire --to 0xSALE --data 0x195ad114 --start 23:00 --label project_free

プレビューでシミュレーションが成功すると、エンジンはbaw contract-call executeを1回呼び出します。最終レポートには、トランザクションハッシュ、BscScanリンク、レシートのステータス、取得したアセット(利用可能な場合)、タイムライン、ログパスが含まれます。

基本的なコマンド例

関数シグネチャを使用する

生のcalldataを準備する代わりに、関数シグネチャを指定できます。

./fastmint.sh fire \
  --to 0xSALE \
  --sig "claimFreeShare()" \
  --start 23:00

有料ミントを送信する

有料ミントには、明示的な金額と、それに一致する最大上限額が必要です。たとえば、1口あたり0.005 BNBで2口購入する場合は、次のように指定します。

./fastmint.sh fire \
  --to 0xSALE \
  --sig "buyWithBnb(uint256,address,uint256)" \
  --args '[2,"0x0000000000000000000000000000000000000000",0]' \
  --value 0.01 \
  --maxValue 0.01 \
  --start 23:00

無料ミントでは--value 0を使用する必要があります。このツールは、上限額なしのゼロ以外の値を拒否し、--maxValueを超える値も拒否します。

特定のNFT結果を要求する

実行を、正確な数のNFTがウォレットに入ることをプレビューが示した場合にのみ行うには、--expectNftを使用します。

./fastmint.sh fire \
  --to 0xNFT \
  --data 0xa0712d68...0002 \
  --value 0 \
  --expectNft 2

動的引数

引数は各プレビューの直前に評価できます。締切、ウォレットアドレス、Agent ID、またはコントラクトのカウンターが開始時刻の近くで変わる場合に便利です。

  • $walletは、BNB Smart Chainに接続されたウォレットアドレスに解決されます。
  • $agentIdは、ウォレットに登録されたハンドルから導出されたAgent IDのトークンIDに解決されます。
  • $zeroはゼロアドレスに解決されます。
  • $now+1800は、現在のUnix時刻に1,800秒を加えた値に解決されます。
  • {"getter":"totalMinted()","add":1}はgetterを読み取り、その符号なし整数の結果に1を加えます。
  • {"getter":"saleStart()","at":"0x..","mul":2}は別のコントラクトからgetterを読み取り、その結果に2を掛けます。

たとえば、次のコマンドはプレビューごとにAgent IDと締切を更新します。

./fastmint.sh fire \
  --to 0xSALE \
  --sig "mintFree(uint256,uint256,uint256,uint256,address)" \
  --args '["$agentId","1","0","$now+1800","0x0000000000000000000000000000000000000000"]' \
  --start 21:00

動的呼び出しでは、送信先、セレクター、値に基づくロックキーを使用します。そのため、引数を変更しても同じミントが誤って2回実行されることはありません。

タイミングとトリガーの動作

開始時刻の前後には、エンジンが複数の独立したトリガーからプレビューを送信することがあります。デフォルトのバーストは3秒間継続し、プレビューの間隔は少なくとも350ミリ秒で、一度に最大3件のプレビューを実行できます。

バースト後も、eth_callループはタイムアウトまで成功するシミュレーションを確認し続けます。タイムアウトのデフォルトは600秒です。これにより、プレビュー上限を繰り返し消費することなく、告知より遅れて開始するセールにも対応できます。

リバートは、コントラクトのSourcify ABI、組み込みの一般的なエラー、利用可能な場合は4byteデータを使用してデコードされます。NotStarted、NotOpen、TooEarlyなどのエラーは一時的なものとして扱われます。SoldOut、FreeGone、AlreadyClaimed、NotEligible、WrongValueなどのエラーは終了エラーとして扱われます。不明なエラーは、致命的なエラーになるまで猶予期間中待機します。

--waitOnと--fatalOnの正規表現で分類をカスタマイズできますが、コントラクトのエラー動作を理解している場合にのみ使用してください。

理解しておくべき安全対策

  • このツールでは、対象のミントについてユーザーからの明示的な指示が必要です。
  • 実行前にロックファイルが書き込まれ、同じ呼び出しが再度ブロードキャストされるのを防ぎます。
  • エンジンが自動的にサインインしたり、秘密鍵やシードフレーズを要求したりすることはありません。
  • Binanceのリスクブロック、リスクフラグ、許可設定の変更、権限の変更があると実行を停止します。
  • ウォレットには、指定した金額とガスに十分な残高が必要です。
  • プレビューにはシミュレーションコード000000000とリクエストIDが必要で、ネイティブ資産の流出が許容範囲内であり、禁止されたウォレット変更がないことが求められます。
  • PENDING_CONFIRMATIONは、ユーザーがBinance Appで承認する必要があることを示します。トランザクションを再送してはいけません。
  • executeエラー、リバートされたトランザクション、またはレシートが見つからない場合は、自動的に再試行しないでください。

過去の実行を確認するには、次を使用します。

./fastmint.sh logs
./fastmint.sh locks

ロックを削除するのは、新たに明示的なユーザー指示を受けた後だけにしてください。トランザクションの処理が遅い、または失敗したように見えるという理由だけで削除してはいけません。

トラブルシューティング

ウォレットと開発者モードのエラー

baw wallet status が UNCONNECTED を報告する場合は、手動でもう一度サインインしてください。コード 351802 と 351804 は通常、Developer Mode が無効、期限切れ、または残高上限を超えていることを示します。コード 351803 は Binance によるリスクブロックであり、回避してはいけません。

シミュレーションとコントラクトのエラー

Binance のバックエンドが開始ブロックを認識する前に、351805 の応答が繰り返されるのは正常です。ただし、引数が正しくない可能性もあります。NotStarted の応答が続く場合は、設定時刻が誤っている可能性があります。SoldOut、FreeGone、AlreadyClaimed は終了状態です。

AgentIdRequired または NotEligible は、呼び出しに Agent ID 引数が必要であることを示している可能性があります。PaymentLow や WrongValue などの支払いエラーは、指定した BNB 額がコントラクトの要件と一致していないことを意味します。

ネットワークと証明書の問題

RPC が遅い、またはレート制限を受けている場合は、FASTMINT_RPCS または FASTMINT_RPCS_EXTRA を設定してください。Node が UNABLE_TO_GET_ISSUER_CERT_LOCALLY を報告する場合は、インストールセクションの説明に従って CA バンドルを生成または指定してください。

DNS インターセプトによって、証明書エラーが発生したり、予期しない ISP ドメインが返されたりすることもあります。エージェントの制御外で暗号化 DNS または VPN を使用してください。システム DNS を自動的に変更してはいけません。

便利なファイルとコマンド

主なファイルは次のとおりです。

  • fastmint.sh は benchmark、recon、fire、log、lock コマンドを起動します。
  • fire.js は事前チェック、トリガー、プレビュー、実行、レシートを管理します。
  • recon.js はコントラクトの詳細とミント候補を検出します。
  • bench.js はウォレットとネットワーク環境を確認します。
  • lib.js は RPC 競合、WebSocket ヘッド、NTP 補正、リバートのデコード、ウォレットヘルパーを提供します。
  • runs/ にはログ、プレビューデータ、実行データ、レシート、ロックファイルが保存されます。
  • cache/ にはダウンロードした Sourcify ABI が保存されます。

各実行ログにはローカル時刻と T+x.xxxs オフセットが含まれます。最終行は TIMELINE の概要です。

まとめ

fastmint-fcfs は、時間制約のある BSC ミント向けに、コントラクトの調査、時刻同期、ブロックチェーンシグナルの並列取得、Binance ウォレットのプレビュー、単回実行の保護を組み合わせています。まず bench から始め、recon で対象を確認し、--dry を使ってリハーサルを行ってください。その後、calldata、金額、ウォレットの状態、ユーザー認証を確認してから実行してください。

このプロジェクトは現在、BNB Smart Chain を対象としています。チェーン ID、RPC プール、Agent ID レジストリ、エクスプローラー連携は BSC 固有のため、マルチチェーンツールとして扱うべきではありません。