WaveClamp
ワークフロー

ゲームアイテム用ERC1155契約:計画からテストまで

03
ゲームアイテムセット

ゲームアイテム契約へのミント機能の追加

剣、ポーション、鍵など、固有のトークンIDを持つアイテムを発行する単一の契約が必要で、誰が新しいトークンを生成できるかを確認したいとします。エージェントはSolidityコードを記述し、ローカルチェーンまたはテストネットワーク上でコンパイルとテストコマンドを実行し、各ステップを実際の結果と共にカード形式で表示します。このガイドはミント関数に焦点を当てています。なぜなら、それを呼び出せる人がトークンの総数を決定するからです。デプロイ済みの契約は変更できないため、ここでの作業はすべて価値のないコインを持つローカルチェーンまたはテストネットワーク上で行われます。初心者は4つのステップを順番に追従でき、経験豊富な読者は下部のチュートリアルにジャンプできます。同じ4つのステップは、各チケットタイプに固有のIDを持ち、ミント関数が各チケットの発行数を決定するチケットセットにも適用できます。

01

プロジェクトフォルダを開く

WaveClampを起動し、.solファイルとテストを含むフォルダをチャットの作業フォルダとして選択します。また、「Ask first(最初に確認)」を選択し、すべての変更があなたに承認または拒否される差分として届くようにします。ファイルツールはそのフォルダ内で動作するため、プロジェクトは1か所にまとめておいてください。練習用であれば、最初の実行には一時フォルダを作成してください。

02

契約の内容を指示する

3つのアイテムタイプを持つゲームアイテム契約、1つのオーナーアカウントのみが呼び出せるミント関数、バッチ転送をリクエストし、エージェントにwrite_fileでファイルを作成させます。ファイル名は契約名に合わせて、後のステップで参照できるようにします。最初のリクエストは小さく保ち、最初の差分が承認された後にバッチ転送を追加する2回目のリクエストを行います。

03

コンパイルとテストを実行する

エージェントにShell経由でコンパイルコマンドとテストコマンドを実行させ、拡張されたカード上で終了コードと失敗したテストの名前を読み取ります。成功は要約ではなく、実際の終了コードによって判断されます。コンパイルコマンドが失敗した場合、カードにはエラーテキストが表示され、エージェントはそれを読み取って新しい差分として修正を提案できます。

04

結果を確認する

拡張されたカードを開き、差分とコマンド出力を読み、正しいものは承認し、それ以外は拒否し、テストがまだ失敗している箇所には修正を依頼します。テストがパスするまでこれを繰り返します。その後、ミント関数をもう一度読み直してください。承認される差分は小さく保つため、後続の失敗が10個の変更ではなく1つの変更を指すようにします。

開始するための最小限のインターフェース

MultiTokenMinimal.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IMultiTokenMinimal {
    event TransferSingle(address indexed operator,
        address indexed from, address indexed to,
        uint256 id, uint256 value);

    function balanceOf(address account, uint256 id)
        external view returns (uint256);

    function uri(uint256 id)
        external view returns (string memory);
}

この読み取り専用インターフェースは、マルチトークン標準のTransferSingleイベント、balanceOf関数、uri関数を宣言しています。状態、ミントロジック、キーは保持しないため、実際のロジックを追加する前に読むのに小さなファイルです。まずここでコンパイルコマンドを実行してください。コンパイルを先に行い、エージェントにミント関数から始めて、レビュー済みの差分を1つずつ拡張させてください。ファイル名は例のラベルと一致しているため、後でエージェントに開くよう依頼できます。

チュートリアル:ミント、比較、バッチ、トークンの説明

ミント関数を追加する

契約を開き、エージェントにERC1155 _mintヘルパーを、オーナーアカウントのみが呼び出せる公開関数でラップするよう依頼します。エージェントはread_fileで現在のコードを確認し、edit_fileで関数を挿入し、変更を差分として表示します。一般的なオープンソース実装では、_mintや_mintBatchといった内部ヘルパーが公開されており、内部ヘルパー自体にはアクセスチェックがないため、ラッパーが重要になります。同じ方法でERC20トークンを段階的に作成できますが、ゲームアイテムセットにはIDが必要なので、マルチトークンのレイアウトから始めます。その後Shellがコンパイルコマンドとテストコマンドを実行し、各カードに実際の終了コードを表示します。テストを読み終えてから、差分を承認してください。

ERC-721の例と比較する

プロジェクト内のERC721契約の例を開くか、エージェントにwrite_fileで1つ作成させ、アイテムセットの隣に配置します。エージェントはgrepで両方のファイルの関数をリストし、read_fileで所有権の保存方法を比較します。ユニークトークンのファイルではトークンごとに1つのオーナーを持ち、マルチトークンのファイルではアカウントとIDごとに残高を持ちます。ソウルバウンドNFTを使用した分散型プロファイル用の標準では、転送できないトークンが必要ですが、これはプレイヤーが受け渡すアイテムとは異なる設計です。エージェントに短い表に違いをまとめさせます。チャットで比較を読み、どの標準が設計に合致するかを判断してから、コード変更を依頼してください。

バッチ転送を追加する

プレイヤーはしばしば複数のアイテムタイプを一度に移動するため、エージェントにsafeBatchTransferFromとbalanceOfBatchを契約に追加するよう依頼します。エージェントはedit_fileで変更を行い、globでテストファイルを検索し、各編集後にShellでテストコマンドを実行します。バッチ関数は1つのトランザクションで複数のトークンIDを移動するため、1つのテストで複数の残高を確認できます。ERC4337のガスレスオンボーディングの理解は別の主題なので、最初の契約には含めず、別途テストしてください。Ask firstで差分を読み、テストを再実行し、変更を承認する前に出力内のTransferBatchイベントを確認してください。

受信者とメタデータを確認する

トークンを受信する契約は、onERC1155ReceivedとonERC1155BatchReceivedを実装し、トークンを受け入れなければなりません。そうでない場合、安全な転送は拒否されます。エージェントに両方の名前でgrepを実行させ、read_fileで受信側契約を開き、どちらが欠落しているかをリストアップするよう依頼してください。次に、uri(id)の値に{id}を含めるようedit_fileで依頼します。これはクライアント側でトークンIDの小文字16進数(64文字にパディング)に置換されます。各IDに対してwrite_fileでJSONファイルを作成してください。コンパイルコマンドとテストコマンドを実行し、両方の終了コードを読み、変更を承認する前に最終的な差分を確認してください。

Windows用WaveClamp

最初のマルチトークン契約を始めよう

WaveClampをダウンロード ↗