During the weekend I was struggling with the Catalyst fund2 voting process because
- Most of my ADA is locked up in the pledge of my pool and I want to use it to vote
- Being curious, I wanted to know how the process actually works and what is going on rather than just following step-by-step instructions
All this being highly experimental, super innovative and bleeding edge means that public documentation is close to non-existent. So I thought I’d share what I found out.
This is my understanding so far. Some of it is speculation. Please correct me where I got it wrong:
- We are not voting on the Shelley mainnet, but on some other chain (Voltaire testnet?) based on the Jörmungandr code. I’ll call this the voting chain.
- The mobile apps will submit transactions to that voting chain
- Voting is done using a seperate keypair which is generated during the voter registration process
- During voter registration, the Daedalus Catalyst wallet creates a new vote signing key and verification key and then submits a metadata transaction to the Shelley mainnet which associates the wallet’s staking verification key with the voter verification key
- Daedalus Catalyst then creates a QR code which contains the voter signing key encrypted with the PIN
- The mobile app reads the voter key and uses it to submit voting transactions to the voting chain once it is live
- On December 15 a snapshot will be taken from the Shelley chain to determine the ADA balance associated with each registered staking key and, in turn, voting key.
- The information about how much of ADA controlled by each voting key is encoded in the genesis block of the voting chain
How the actual voting is done I haven’t yet found out. I suppose it involves moving tokens on the voting chain. Is that documented anywhere? If so, where? If not, why not?
So, in order to use my pledge to vote I needed to do the following things:
- Generate a voting key pair
- Generate and submit a metadata transaction to associate my voting vkey with my staking vkey
- Create a QR code so my mobile phone can read the voting skey
For step 1 I needed to install the jcli
tool from https://github.com/input-output-hk/jormungandr. This is documented in the README.
Generate the voting keypair:
jcli key generate --type ed25519extended >vote.skey
jcli key to-public < vote.skey > vote.pk
Step 2, the generation of the metadata transaction, is done using a tool @Dor_Garbash mentioned in the last townhall call. The payment skey/addr are used to pay for the transaction. The --time-to-live
parameter can be obtained with cardano-cli query tip --mainnet
and then adding a few slots. Every SPO has probably done this before.
# Get it
git clone https://github.com/input-output-hk/voter-registration-tool.git
# Build it
cd voter-registration-tool
nix-build default.nix -A haskellPackages.voter-registration.components.exes.voter-registration -o voter-registration
# Run it
voter-registration-tool/voter-registration/bin/voter-registration \
--payment-signing-key payment.skey \
--payment-address $(cat payment.addr) \
--vote-public-key vote.pk \
--stake-signing-key stake.skey \
--mainnet \
--time-to-live nnnnnnn \
--out-file tx.signed
cardano-cli transaction submit --tx-file tx.signed --mainnet
For step 3, the generation of the QR code, I needed a script that was shown during townhall 8 or 9.
# Get it
git clone https://github.com/input-output-hk/vit-kedqr
# Build it (see README)
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" main.go
# Run it
./main -input=vote.skey -pin=1234 -output=vote.png
Now if I did it right, I will be able to vote. If not, bad luck
And now for a bit of a rant.
While I’m still somewhat excited to be part of all this, I find the opacity of this whole process unacceptable. Setting up and running a stakepool is already at the limit. No hardware wallet? Having to puzzle together transactions by hand on the command line, UTXOs, change, fees, ttl and all? Give me a break. Cardano is supposed to be the most sophisticated, professionally run blockchain project on the planed and we have to wade in the mud like this?
Okay, so maybe it is the price to be in the avant-garde and who puts in the wrong change address and loses all their money will learn to be more careful next time.
Now we are also a DAO and want to decide on project budgets. Great. The first thing I’m asked to do is to submit a “registration transaction”. What exactly this is? No idea. Let’s click the link to find out. Last time I did this, an empty Google doc headlined “Registration transaction” came up. Not helpful at all. Why not simply a message saying “Please don’t click this link again”? At least that would indicate that, whoever did this, knows their classics.
Okay, suppose I ignore the uneasy feeling in my stomach and enter my spending password, still not knowing what this transaction will do. Next is a QR code which I’m supposed to read with my mobile app. What is in it? Does it contain my signing key? What can the app do with it? Is it safe to do this? I only know I need to take a screenshot of the code so it must be important.
At this point I had to say no, thanks, but no. I can’t do this without knowing what is going on, so down the rabbit hole and let’s find out how all of this works. I admit it wasn’t all that difficult but I’m still astonished that none of this seems to be publicly documented. How many people are working on the Catalyst project again? How are they all supposed to know what they are doing?
Finally I’m quite disappointed by the way the community reacts to all of this. I guess that many Catalyst participants are also SPOs and some of us have a lot of money locked in pledge, so I’m certainly not the only one for whom the “happy path” with Daedalus Catalyst won’t work. Yet the Telegram chat has almost nothing about it while everyone seems to be busy calculating voting rewards. Also nothing in the Forum. Am I looking in the wrong places?