AgentStack
SKILL verified MIT Self-run

Plutus V3 Conway

skill-flux-point-studios-cardano-agent-skills-plutus-v3-conway · by Flux-Point-Studios

Plutus V3 under Conway: unified context, governance scripts, V2→V3 migration. Conceptual and practical guidance.

No reviews yet
0 installs
17 views
0.0% view→install

Install

$ agentstack add skill-flux-point-studios-cardano-agent-skills-plutus-v3-conway

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Plutus V3 Conway? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

plutus-v3-conway

When to use

  • Migrating from Plutus V2 to V3
  • Writing governance scripts (voting, proposing)
  • Understanding Conway-era script changes

Operating rules (must follow)

  • Confirm target network supports Conway
  • Test all governance scripts extensively on testnet
  • Don't mix V2 and V3 mental models

Key V3 changes

1. Unified context argument

V2: validator(datum, redeemer, context) → Bool
V3: validator(context) → ()  // datum/redeemer inside context

2. Datum is now optional

  • For spending: datum can be Nothing if not needed
  • Access via ScriptContext.scriptInfo

3. New script purposes

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. Return type changes

  • V2: Returns Bool (True/False)
  • V3: Returns () (unit) - failure via error/trace

V3 interface (Aiken)

Spending validator

validator my_validator {
  spend(
    datum: Option,
    redeemer: MyRedeemer,
    _own_ref: OutputReference,
    tx: Transaction,
  ) {
    // Return () on success
    // Use expect/fail! for failure
    expect Some(d) = datum
    d.owner == get_signer(tx)
  }
}

Governance validator

validator governance {
  vote(
    redeemer: VoteRedeemer,
    voter: Voter,
    tx: Transaction,
  ) {
    // Validate voting logic
    True
  }

  propose(
    redeemer: ProposeRedeemer,
    tx: Transaction,
  ) {
    // Validate proposal logic
    True
  }
}

Migration checklist (V2 → V3)

1. Update validator signature

// V2
fn spend(datum: Datum, redeemer: Redeemer, ctx: ScriptContext) -> Bool

// V3
fn spend(datum: Option, redeemer: Redeemer, own_ref: OutputReference, tx: Transaction) -> ()

2. Handle optional datum

// V3 - datum may be None
spend(datum: Option, ...) {
  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. Update return logic

// 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. Script hash changes

  • V3 scripts have different hashes than V2 equivalents
  • Recalculate all script addresses
  • Update any hardcoded references

Examples

Example: Simple V3 spending validator

use aiken/collection/list
use cardano/transaction.{Transaction, OutputReference}

type Datum {
  owner: ByteArray,
}

type Redeemer {
  // empty
}

validator simple_lock {
  spend(
    datum: Option,
    _redeemer: Redeemer,
    _own_ref: OutputReference,
    tx: Transaction,
  ) {
    expect Some(d) = datum
    list.has(tx.extra_signatories, d.owner)
  }
}

Example: Governance voting script

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 governance context

DRep (Delegated Representative)

  • Users can delegate voting power to DReps
  • Scripts can act as DReps

Constitutional Committee

  • Multi-sig governance for protocol changes
  • Scripts can be committee members

Governance actions

  • Parameter changes
  • Hard fork initiation
  • Treasury withdrawals
  • Constitutional changes

CLI flags for V3

# 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 \
  ...

Safety / key handling

  • Governance scripts are high-stakes—test extensively
  • V3 governance affects protocol parameters
  • Verify all script hashes after migration
  • Use preprod for testing governance flows

References

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.