plutus-v3-conway について
plutus-v3-conwayは、Plutus V2からの移行やConwayガバナンススクリプトの作成を支援する、Cardano開発者向けのガイダンススキルです。V3のインターフェース、オプショナルなdatum、新しいスクリプト用途、移行後のハッシュ変更を説明します。
主な機能
- 01V2からV3へのインターフェース移行
- 02オプショナルなdatumの扱い
- 03投票・提案の用途を解説
- 04V3の戻り値変更を説明
- 05ガバナンス例とテスト上の注意
活用シーン
- 01Plutus V2バリデーターのV3移行
- 02Conwayの投票・提案スクリプト作成
- 03移行後のスクリプトハッシュとアドレス確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ flux-point-studios/ cardano-agent-skills --skill plutus-v3-conwayインストール後、Claude Code で/plutus-v3-conwayを入力して読み込まれたか確認します。
同梱ファイルreference/v3-notes.md
詳細
plutus-v3-conway
使用する場面
- Plutus V2 から V3 への移行
- ガバナンススクリプトの作成(投票、提案)
- Conway 時代のスクリプトの変更点の理解
運用ルール(必ず守ってください)
- 対象ネットワークが Conway に対応していることを確認してください
- すべてのガバナンススクリプトをテストネットで徹底的にテストしてください
- V2 と V3 の考え方を混同しないでください
V3 の主な変更点
1. コンテキスト引数の統合
V2: validator(datum, redeemer, context) → Bool
V3: validator(context) → () // datum/redeemer inside context
2. Datum が任意に
- Spending では、不要な場合は datum を Nothing にできます
ScriptContext.scriptInfo経由でアクセスします
3. 新しいスクリプトの用途
Spending - spending UTxOs (existing)
Minting - minting/burning tokens (existing)
Rewarding - withdrawing rewards (existing)
Certifying - stake certificates (existing)
Voting - governance voting (NEW in V3)
Proposing - governance proposals (NEW in V3)
4. 戻り値の型の変更
- V2:
Boolを返します(True/False) - V3:
()(unit)を返します。失敗はエラー/trace で示します
V3 インターフェース(Aiken)
Spending バリデーター
validator my_validator {
spend(
datum: Option<MyDatum>,
redeemer: MyRedeemer,
_own_ref: OutputReference,
tx: Transaction,
) {
// Return () on success
// Use expect/fail! for failure
expect Some(d) = datum
d.owner == get_signer(tx)
}
}
ガバナンスバリデーター
validator governance {
vote(
redeemer: VoteRedeemer,
voter: Voter,
tx: Transaction,
) {
// Validate voting logic
True
}
propose(
redeemer: ProposeRedeemer,
tx: Transaction,
) {
// Validate proposal logic
True
}
}
移行チェックリスト(V2 → V3)
1. バリデーターのシグネチャを更新する
// V2
fn spend(datum: Datum, redeemer: Redeemer, ctx: ScriptContext) -> Bool
// V3
fn spend(datum: Option<Datum>, redeemer: Redeemer, own_ref: OutputReference, tx: Transaction) -> ()
2. 任意の datum を処理する
// V3 - datum may be None
spend(datum: Option<Datum>, ...) {
expect Some(d) = datum // Fail if None when you need it
// or
when datum is {
Some(d) -> handle_datum(d)
None -> handle_no_datum()
}
}
3. 戻り値のロジックを更新する
// V2 - return Bool
if condition { True } else { False }
// V3 - return () or fail
if condition { () } else { fail @"Condition not met" }
// or use expect
expect condition
4. スクリプトハッシュの変更
- V3 スクリプトのハッシュは、対応する V2 スクリプトとは異なります
- すべてのスクリプトアドレスを再計算してください
- ハードコードされた参照をすべて更新してください
例
例:シンプルな V3 Spending バリデーター
use aiken/collection/list
use cardano/transaction.{Transaction, OutputReference}
type Datum {
owner: ByteArray,
}
type Redeemer {
// empty
}
validator simple_lock {
spend(
datum: Option<Datum>,
_redeemer: Redeemer,
_own_ref: OutputReference,
tx: Transaction,
) {
expect Some(d) = datum
list.has(tx.extra_signatories, d.owner)
}
}
例:ガバナンス投票スクリプト
use cardano/transaction.{Transaction}
use cardano/governance.{Voter, ProposalProcedure}
validator dao_governance {
vote(
redeemer: Data,
voter: Voter,
tx: Transaction,
) {
// Check voter is authorized
// Check voting rules are followed
True
}
propose(
redeemer: Data,
proposal: ProposalProcedure,
tx: Transaction,
) {
// Check proposer has required stake
// Check proposal format
True
}
}
Conway のガバナンスコンテキスト
DRep(委任代表者)
- ユーザーは投票権を DRep に委任できます
- スクリプトは DRep として機能できます
憲法委員会
- プロトコル変更に関するマルチシグガバナンス
- スクリプトは委員会のメンバーになれます
ガバナンスアクション
- パラメーターの変更
- ハードフォークの開始
- トレジャリーからの引き出し
- 憲法の変更
V3 用 CLI フラグ
# Build V3 script with Aiken
aiken build --plutus-version v3
# CLI transaction with V3 script
cardano-cli conway transaction build \
--tx-in-script-file my_script_v3.plutus \
...
安全性/鍵の取り扱い
- ガバナンススクリプトは重大な影響を伴うため、徹底的にテストしてください
- V3 ガバナンスはプロトコルパラメーターに影響します
- 移行後、すべてのスクリプトハッシュを検証してください
- ガバナンスのフローをテストするには preprod を使用してください
参考資料
shared/PRINCIPLES.md- Plutus V3 CIP
- Conway ガバナンス
aiken-smart-contracts(V3 バリデーターの作成用)
コメント
Markdown 対応