Implementing a Secure and Scalable Voting Solution for Catalyst F13
Associating multiple stake keys with a single voting key to achieve objectives
The Cardano Foundation’s participation in F13 of Project Catalyst presented unique operational considerations. In this round, the Foundation sought to enhance its voting involvement while adhering to its established delegation strategy and reducing unnecessary asset movements. This process required careful planning and execution as the Foundation navigated voting in accordance with its overarching goals and principles.
The Foundation’s wallet structure arises from its stake pool operator (SPO) delegation strategy and private key security requirements. These factors necessitate dividing total ada holdings into tranches of approximately 20.25 million, as publicly visible on pool.pm and disclosed in the 2023 Financial Insights Report. The most readily available option, registering one Catalyst voting key (QR code) per tranche, presented challenges. With a total intended voting stake of 180 million ada, this approach would have required registration of nine QR codes, each connected to a separate device, or repeated installation and uninstallation of the Catalyst app on a single device—neither option represented an acceptable workflow. As a result, standard end-user tools like Eternl or Yoroi proved unsustainable.
As such, the Foundation sought an alternative approach while adhering to our existing security protocols. The requirements were clear:
- •Generate one voting key in a secure environment and transform it into an encrypted QR code.
- •Register nine separate wallets for voting, using their stake keys, without necessitating the movement of assets or interaction with payment keys.
- •Enable voting with the total intended voting stake of ada (180 million) in a single transaction.
The Catalyst registration QR code represents a private key, which typically adheres to the Foundation’s stringent key generation procedures. In this specific instance, and after careful risk assessment, we intentionally adopted a different approach to achieve the outlined conditions. The calculated deviation from standard protocols for key generation considered the unique off-chain nature of Catalyst, where risks are inherently lower. The Foundation maintained its usual management processes for staking and payment keys.
Building on Cardano community tooling
CIP-36 defines the transaction metadata format that Catalyst uses for managing voting power. In essence, this standard describes the process by which Catalyst establishes an association between staked ada and a particular voting key. This voting key, in turn, facilitates registration within the Catalyst app. The result is a cryptographic link between Catalyst voting power and staked ada, signed by the key holder controlling stake delegation.
In August 2023, during the Cardano Catalyst Fund 10 voting period, community member HeptaSean explored the feasibility of associating multiple stake keys with a single voting key. This exploration aimed to simplify the registration process for his personal wallet setup, which comprised multiple addresses. He recorded his findings and the process on the Cardano forum—also quoting Martin Lang—who documented an alternative Catalyst registration process here.
Inspired by HeptaSean’s and Lang’s work, the Foundation adopted a similar process and continued testing the specified tools. While the exact setup they described did not yield success in our environment, the community’s development of various tools proved invaluable. Through experimentation, we arrived at a functional solution using tools developed by IOHK and Lang:
- •jcli: Utilized for voting key creation (IOHK).
- •catalyst-toolbox: Employed for QR code encryption and generation (IOHK).
- •cardano-signer: Leveraged for the creation and signing of certificates (Martin Lang).
- •cardano-cli: Used for transaction creation and submission (IOHK).
This combination of tools enabled the Foundation to implement a solution for secure, scalable Catalyst voting.
Catalyst voting key registration: a multi-stake key approach
The process outlined generates a unique voting key, links it to multiple stake keys, and securely registers them on the Cardano blockchain.
jcli key generate --type ed25519extended > vote.skey
jcli key to-public < vote.skey > vote.vkey
jcli key to-public < vote.skey > vote.vkey
catalyst-toolbox qr-code encode --pin xxxx --input vote.skey --output vote.png img
Complete these steps for every stake key:
cardano-signer sign --cip36 --mainnet \
--payment-address <reward address (addr1…)> \
--vote-public-key vote.vkey \
--secret-key stake1.skey \
--json
cardano-cli conway transaction build --mainnet \
--tx-in <utxo to spend> \
--change-address <key to spend next utxo>\
--metadata-json-file catalystregistration1.json \
--out-file catalystregistrationTx1.raw
cardano-cli transaction sign \
--tx-body-file catalystregistrationTx1.raw \
--signing-key-file <key to pay for txFee> \
--mainnet \
--out-file catalystregistrationTx1.signed
cardano-cli conway transaction submit \
--mainnet \
--tx-file catalystregistrationTx1.signed
Shape the future of Cardano and help us improve for Project Catalyst 2025. We invite your valuable feedback via the contact form. Please select the “Community” service area and the “Project Catalyst” sub field.