mcpField
A
aiken-smart-contracts

aiken-smart-contracts

github.com/flux-point-studios开发851 次安装6 周前更新
代码仓库

关于 aiken-smart-contracts

面向编写和审计 Aiken 验证器的技能,涵盖智能合约构建、测试及 Plutus 工件生成。强调版本确认、脚本哈希校验和部署前测试等安全步骤。

主要功能

  1. 01编写与审计 Aiken 验证器
  2. 02构建并测试智能合约
  3. 03生成 .plutus 工件
  4. 04校验脚本哈希与版本
  5. 05部署前测试安全实践

适用场景

  1. 01实现新的 Aiken 验证器
  2. 02运行合约构建与测试
  3. 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