contract について
contractはStacks上でClarityスマートコントラクトをデプロイ、操作するスキルで、開発者やコントラクト運用者向けです。読み取り専用クエリに加え、任意のpost conditionsを指定したオンチェーン取引に対応します。
主な機能
- 01.clarファイルからのコントラクトデプロイ
- 02公開関数の呼び出しと取引のブロードキャスト
- 03ウォレット不要の読み取り専用呼び出し
- 04取引手数料の指定
- 05post conditionsの設定
活用シーン
- 01Clarityコントラクトのデプロイ
- 02デプロイ済みコントラクトへの関数呼び出し送信
- 03オンチェーンのコントラクト状態の照会
- 04取引でのトークン転送の制限
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ aibtcdev/ skills --skill contractインストール後、Claude Code で/contractを入力して読み込まれたか確認します。
同梱ファイルAGENT.mdcontract.ts
詳細
コントラクトスキル
Stacks ブロックチェーン上で、Clarity スマートコントラクトのデプロイと操作を行います。.clar ソースファイルからコントラクトをデプロイし、公開関数を呼び出し(任意でポストコンディションを指定できます)、読み取り専用関数を呼び出してオンチェーンの状態を照会します。
- read — 読み取り専用で、ウォレットは不要です。
- deploy と call — トランザクションをブロードキャストする書き込み操作で、ロック解除済みのウォレットが必要です。
使い方
bun run contract/contract.ts <subcommand> [options]
サブコマンド
deploy
Stacks ブロックチェーンに Clarity スマートコントラクトをデプロイします。.clar ファイルからコントラクトのソースを読み込み、smart_contract トランザクションをブロードキャストします。
bun run contract/contract.ts deploy \
--source <path-to-file.clar> \
--name <contract-name> \
[--fee <fee>]
オプション:
--source(必須)— デプロイする.clarソースファイルのパス--name(必須)— コントラクト名(小文字、ハイフン可、最大 128 文字)--fee(任意)— 手数料プリセット(low|medium|high)または micro-STX 額。省略した場合は自動で見積もられます
出力:
{
"success": true,
"txid": "abc123...",
"contractId": "SP2...deployer.my-contract",
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet"
}
call
デプロイ済みの Stacks スマートコントラクトの公開関数を呼び出します。contract_call トランザクションに署名してブロードキャストします。
bun run contract/contract.ts call \
--contract <contractId> \
--function <functionName> \
--args <json-array> \
[--post-condition-mode <deny|allow>] \
[--post-conditions <json-array>] \
[--fee <fee>]
オプション:
--contract(必須)—ADDRESS.contract-name形式の完全なコントラクト ID--function(必須)— 呼び出す公開関数名--args(任意)— 関数の引数を JSON 配列で指定します(デフォルト:[])。型付きオブジェクトは{"type":"uint","value":100}形式です。--post-condition-mode(任意)—deny(デフォルト)は予期しないトークン転送をブロックし、allowはすべて許可します--post-conditions(任意)— ポストコンディションを JSON 配列で指定します(形式については「注記」を参照)--fee(任意)— 手数料プリセット(low|medium|high)または micro-STX 額。省略した場合は自動で見積もられます
出力:
{
"success": true,
"txid": "abc123...",
"contract": "SP2...deployer.my-contract",
"function": "set-value",
"args": [42],
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet"
}
read
デプロイ済みの Stacks スマートコントラクトの読み取り専用関数を呼び出します。トランザクションはブロードキャストされず、ウォレットも不要です。
bun run contract/contract.ts read \
--contract <contractId> \
--function <functionName> \
[--args <json-array>] \
[--sender <address>]
オプション:
--contract(必須)—ADDRESS.contract-name形式の完全なコントラクト ID--function(必須)— 呼び出す読み取り専用関数名--args(任意)— 関数の引数を JSON 配列で指定します(デフォルト:[])--sender(任意)— 読み取り専用呼び出しで送信元として使用する Stacks アドレス(省略した場合はアクティブなウォレットアドレスを使用します)
出力:
{
"contract": "SP2...deployer.my-contract",
"function": "get-value",
"okay": true,
"result": "(ok u42)",
"network": "mainnet"
}
引数
| サブコマンド | オプション | 必須 | 説明 |
|---|---|---|---|
deploy | --source | はい | .clar ソースファイルのパス |
deploy | --name | はい | コントラクト名 |
deploy | --fee | いいえ | 手数料プリセットまたは micro-STX 額 |
call | --contract | はい | 完全なコントラクト ID(ADDRESS.name) |
call | --function | はい | 公開関数名 |
call | --args | いいえ | 関数の引数を格納した JSON 配列 |
call | --post-condition-mode | いいえ | deny(デフォルト)または allow |
call | --post-conditions | いいえ | ポストコンディションオブジェクトを格納した JSON 配列 |
call | --fee | いいえ | 手数料プリセットまたは micro-STX 額 |
read | --contract | はい | 完全なコントラクト ID(ADDRESS.name) |
read | --function | はい | 読み取り専用関数名 |
read | --args | いいえ | 関数の引数を格納した JSON 配列 |
read | --sender | いいえ | 読み取り専用呼び出しの送信元アドレス |
注意事項
- コントラクト名は、デプロイするアドレスごとに一意である必要があります。すでに存在するコントラクトをデプロイしようとすると失敗します。
- デプロイは取り消せません。一度承認されると、コントラクトはオンチェーンに永久に残ります。
- デプロイまたは呼び出しの前に、stxer.xyz でコントラクトの呼び出しを事前にシミュレーションして、Clarity のエラーを検出し、STX を消費せずに手数料を見積もってください。
- ポストコンディションの形式:STX の場合は
{"type":"stx","principal":"SP2...","conditionCode":"eq","amount":"1000000"}、代替可能トークンの場合は{"type":"ft","principal":"SP2...","asset":"SP2....my-token","assetName":"my-token","conditionCode":"eq","amount":"100"}、NFT の場合は{"type":"nft","principal":"SP2...","asset":"SP2....my-nft","assetName":"my-nft","tokenId":1}です。NFT の条件は二者択一(送信する/送信しない)のため、conditionCodeは適用されません。NFT が principal から移動しないことを保証するには、"notSend":trueを使用してください。 --post-condition-mode allowはポストコンディションのチェックを完全にスキップします。コントラクトのロジックを完全に信頼し、ソースコードを確認済みの場合にのみ使用してください。- ウォレット操作には、ロック解除済みのウォレットが必要です(まず
bun run wallet/wallet.ts unlock --password <password>を実行してください)。
コメント
Markdown 対応