关于 aiken-smart-contracts
面向编写和审计 Aiken 验证器的技能,涵盖智能合约构建、测试及 Plutus 工件生成。强调版本确认、脚本哈希校验和部署前测试等安全步骤。
主要功能
- 01编写与审计 Aiken 验证器
- 02构建并测试智能合约
- 03生成 .plutus 工件
- 04校验脚本哈希与版本
- 05部署前测试安全实践
适用场景
- 01实现新的 Aiken 验证器
- 02运行合约构建与测试
- 03生成供 CLI 或 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 版本
- 每次重新构建后验证脚本哈希
- 在主网之前先在预发布网/预览网上测试
- 将 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