Proposals
Submit governance proposals on Cardano
Proposals
Governance proposals submit actions for the community to vote on. The deposit is automatically fetched from protocol parameters and refunded to your reward account when the proposal is finalized.
Submitting a Proposal
import { , , , , } from "@evolution-sdk/evolution"
const = .()
.({
: "https://cardano-preprod.blockfrost.io/api/v0",
: ..!
})
.({ : ..!, : 0 })
// Governance action — e.g. new GovernanceAction.InfoAction() for informational proposals.
// Other types: ParameterChangeAction, HardForkInitiationAction,
// TreasuryWithdrawalsAction, NoConfidenceAction, UpdateCommitteeAction, NewConstitutionAction
declare const : .
declare const : . // your stake reward account — deposit refunded here
declare const : . // metadata URL + content hash describing the proposal
const = await
.()
.({
,
,
})
.()
const = await .()
await .()The govActionDeposit is deducted automatically during transaction balancing.
Governance Action Types
| Action | Description |
|---|---|
| Protocol Parameter Update | Modify network parameters |
| Hard Fork Initiation | Initiate a hard fork |
| Treasury Withdrawal | Withdraw from the treasury |
| No Confidence | Express no confidence in the committee |
| New Constitution | Propose a new constitution |
| Update Committee | Change committee membership |
| Info Action | Informational proposal (no on-chain effect) |
Multiple Proposals
Submit multiple proposals in a single transaction by chaining .propose():
import { , , , , } from "@evolution-sdk/evolution"
const = .()
.({
: "https://cardano-preprod.blockfrost.io/api/v0",
: ..!
})
.({ : ..!, : 0 })
declare const : .
declare const : .
declare const : .
declare const : .
declare const : .
const = await
.()
.({ : , , : })
.({ : , , : })
.()
const = await .()
await .()Guardrail Script
When the constitution defines a guardrail script (as on mainnet), ParameterChangeAction and TreasuryWithdrawalsAction must reference it in policyHash and run it under the propose purpose. For a Plutus guardrail, pass a redeemer to .propose() and provide the script with .attachScript(), a reference input via .readFrom(), or a spent input that carries it:
import { , , , , , , , } from "@evolution-sdk/evolution"
const = .()
.({
: "https://cardano-preprod.blockfrost.io/api/v0",
: ..!
})
.({ : ..!, : 0 })
declare const : . // the constitution's guardrail script
declare const : .
declare const : .
const = new .({
: new ([[, 1_000_000_000n]]),
: .()
})
const = await
.()
.({ , , , : .(0n, []) })
.({ : })
.()
const = await .()
await .()The redeemer is placed at the proposal's index in the transaction, so guardrail-checked proposals can be combined with other proposals in one transaction. Its data must be what the guardrail script expects. The mainnet guardrail does not inspect it. Static and batch redeemers are supported. Self redeemers are not, since a proposal spends no input. A native-script guardrail needs no redeemer, and one passed for it is dropped. The build fails if a proposal with a Plutus policyHash has no redeemer, or if its guardrail script is neither attached nor carried by a reference or spent input.
Next Steps
- Voting — Vote on submitted proposals
- DRep Registration — Register to vote on proposals