aiken-smart-contracts について
Aiken バリデーターの作成・監査、スマートコントラクトのビルドとテスト、Plutus アーティファクト生成を支援するスキルです。バージョン確認やスクリプトハッシュの検証、デプロイ前テストも重視します。
主な機能
- 01Aiken バリデーターの作成と監査
- 02スマートコントラクトのビルドとテスト
- 03.plutus アーティファクトの生成
- 04バージョンとスクリプトハッシュの確認
- 05デプロイ前の安全対策
活用シーン
- 01新しい Aiken バリデーターの実装
- 02コントラクトのビルドとテスト
- 03CLI または MeshJS 向けアーティファクトの生成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ flux-point-studios/ cardano-agent-skills --skill aiken-smart-contractsインストール後、Claude Code で/aiken-smart-contractsを入力して読み込まれたか確認します。
同梱ファイルreference/aiken-workflow.md
詳細
aiken-smart-contracts
使用する場面
- Aiken バリデーターの作成や監査
- スマートコントラクトの構築とテスト
- CLI/MeshJS 用の .plutus アーティファクトの生成
運用ルール(必ず遵守)
- コードを生成する前に Aiken のバージョンを確認します
- 再ビルドのたびにスクリプトハッシュを検証します
- メインネットの前に preprod/preview でテストします
- datum/redeemer スキーマをバージョン管理された API として扱います
ワークフロー
1. プロジェクトを初期化する
aiken new my-project
cd my-project
2. プロジェクトの構成
my-project/
├── aiken.toml # Project config
├── lib/ # Reusable modules
├── validators/ # Validator entry points
│ └── my_validator.ak
└── plutus.json # Generated blueprint
3. バリデーターを作成する
// validators/my_validator.ak
use aiken/transaction.{ScriptContext}
validator {
fn spend(datum: Data, redeemer: Data, ctx: ScriptContext) -> Bool {
// Your validation logic
True
}
}
4. ビルドとテスト
# Build all validators
aiken build
# Run tests
aiken check
# Format code
aiken fmt
5. アーティファクトを生成する
# Blueprint is auto-generated at plutus.json
# Extract .plutus for cardano-cli:
aiken blueprint convert > my_validator.plutus
# Get script hash
cardano-cli conway transaction policyid \
--script-file my_validator.plutus
6. スクリプトアドレスを導出する
cardano-cli conway address build \
--payment-script-file my_validator.plutus \
--testnet-magic 1 \
--out-file script.addr
例
例:シンプルな支出バリデーター
ユーザーのリクエスト:「特定の公開鍵による支出のみを許可するバリデーターを作成してください」
応答:
// validators/pubkey_lock.ak
use aiken/hash.{Blake2b_224, Hash}
use aiken/transaction.{ScriptContext, Spend}
use aiken/transaction/credential.{VerificationKey}
type Datum {
owner: Hash<Blake2b_224, VerificationKey>
}
type Redeemer {
// Could be unit if no redeemer data needed
}
validator {
fn spend(datum: Datum, _redeemer: Redeemer, ctx: ScriptContext) -> Bool {
let ScriptContext { transaction, purpose } = ctx
expect Spend(_) = purpose
// Check if owner signed the transaction
list.has(transaction.extra_signatories, datum.owner)
}
}
# Build
aiken build
# Test
aiken check
# Generate .plutus
aiken blueprint convert > pubkey_lock.plutus
例:パラメーター化されたバリデーター
ユーザーのリクエスト:「タイムロック付きのバリデーターを作成してください」
応答:
// validators/time_lock.ak
use aiken/interval.{Finite, Interval, IntervalBound}
use aiken/transaction.{ScriptContext, ValidityRange}
type Datum {
lock_until: Int // POSIX time in milliseconds
}
validator {
fn spend(datum: Datum, _redeemer: Data, ctx: ScriptContext) -> Bool {
let valid_range: ValidityRange = ctx.transaction.validity_range
// Check if current time is past lock_until
when valid_range.lower_bound.bound_type is {
Finite(tx_earliest_time) -> tx_earliest_time > datum.lock_until
_ -> False
}
}
}
V3 に関する考慮事項(Conway)
- 統一された単一のコンテキスト引数
- 一部のパターンでは datum を省略できます
- ガバナンス用のスクリプト目的を利用できます
- V3 を対象とする場合は
aiken build --plutus-version v3を使用します
安全性/鍵の取り扱い
- datum/redeemer はオンチェーンで公開されるため、秘密情報を含めないでください
- datum スキーマをバージョン管理してください(破壊的変更は資金の損失につながります)
- 再ビルド後は必ずスクリプトハッシュが一致することを検証してください
- 必ず最初に少額でテストしてください
参考資料
shared/PRINCIPLES.md- Aiken のドキュメント
cardano-cli-plutus-scripts(デプロイ用)
コメント
Markdown 対応