flux-point-studios/cardano-agent-skills

plutus-v3-conway

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

First seen Jan 24, 2026

Installation

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

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from flux-point-studios/cardano-agent-skills · top by installs.

npx skills add flux-point-studios/cardano-agent-skills

Browse all from flux-point-studios/cardano-agent-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 8
License LICENSE
Default branch main
Open issues 1
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

Allowed toolsRead

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 4,691 B
  • docs SUMMARY.md 138 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 39 installs

SKILL.md

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<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)
  }
}

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<Datum>, redeemer: Redeemer, own_ref: OutputReference, tx: Transaction) -> ()

2. Handle optional 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. 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<Datum>,
    _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