Governance and Conway Era

The Conway era introduces significant on-chain governance features to the Cardano blockchain, as outlined in CIP-1694 (opens in a new tab). These enhancements enable ADA holders to participate in various on-chain decisions. Lucid Evolution now supports key governance actions, allowing users to engage in the democratic process of the Cardano ecosystem.

๐Ÿ’ก
Governance functionality documentation is actively being updated to reflect the latest features ๐Ÿ› ๏ธ

For ADA Holders

As an ADA holder, you can participate in governance through various voting strategies and delegation options.

๐Ÿ’ก

To be able to delegate your voting power, you must first register the associated stake address and query the reward address. Learn more about stake address registration here.

Voting Delegation

Delegate your voting power to a specific DRep:

await lucid.newTx()
  .delegate.VoteToDRep(rewardAddress, drep)
๐Ÿ’ก

You can also register a stake address, delegate to a pool, and vote to a DRep (e.g., AlwaysAbstain) in one action:

await lucid.newTx()
  .registerAndDelegate.ToPoolAndDRep(rewardAddress, poolId, {
    __typename: "AlwaysAbstain",
  })

Predefined Voting Strategies

await lucid.newTx()
    .delegate.VoteToDRep(rewardAddress, {
      __typename: "AlwaysAbstain",
    })
๐Ÿ’ก

When using predefined strategies like AlwaysAbstain or AlwaysNoConfidence, ensure the DRep object has the __typename property set to the desired value

For DReps

As a Delegated Representative (DRep), you can manage your status and information on the network.

Managing DRep Status

Register a stake address as a DRep:

await lucid.newTx()
  .register.DRep(rewardAddress)
๐Ÿ’ก

Remember to register the associated stake address before registering as a DRep. This way you will be able to query the reward address and update the DRep information. Learn more about stake address registration here.

Script-based DReps

Lucid Evolution supports script-based DReps, enabling programmatic voting behavior for more complex governance strategies

await lucid
  .newTx()
  .register.DRep(rewardAddress)
  .attach.Script(script)

Example

To use these governance methods, initialize the TxBuilder configuration by calling newTx() after setting up Lucid:

  // You can define a DRep object
  const drep: DRep = { __typename: "AlwaysAbstain" }; // Example AlwaysAbstain DRep
 
  // Create and complete the transaction
  const tx = await lucid
    .newTx()
    .delegate.VoteToDRep(rewardAddress, drep)
    .complete();