Stake address registration

Hi. I’m confused about where the stake address is registered. I am following the coinCachew guide and cross-referencing it with the Stake Pool course. Both guides issue the following command which ouputs a file stake.addr.

Generate Stake address
cardano-cli stake-address build
–stake-verification-key-file stake.vkey
–out-file stake.addr \

Shortly after that, the instructions are to issue a command that generates an address from both the payment and stake verification keys:
Generate PaymentWithStake Address
cardano-cli address build
–payment-verification-key-file payment.vkey
–stake-verification-key-file stake.vkey
–out-file paymentwithstake.addr

The output is a file that creates an address that connects both the payment and stake keys, paymentwithstake. I am assuming this the address we use for our pledge.

But I don’t see where the stake address that was generated is associated or used? Although the guide says rewards will accumulate in the stake.addr, but I don’t see how since I don’t see a command to register this or to associate it with anything, ie the pool. How and where is this used?

I must be overlooking something, but I’m hoping someone will help. I’ve spent a lot of time looking, but am still confused. I don’t want to make a mistake especially not with payment or stake addresses.
Thank you!

On the Coin Cashew guide section 11 is where it goes through the steps to register your stake address. You create your certificate then calculate a transaction with a small fee plus the deposit.

Hi. Thank you for your response. But I’ve reviewed that code, and I do not see where the stake.addr is referenced. It is created in step 10. under “Create your stake address from the stake verification key”

Then in step 11. We create a payment address with both the stake key and the payment key, but no reference to the stake.addr that we created.

I don’t see a line of code that actually connects the stake.addr to anything? It is created and never used. Correction, it’s created then queried, but that’s it.

What am I missing?

You are correct, you won’t use the stake.addr file to register you use the stake.cert file that’s made with your stake.vkey. stake.cert is used to make the transaction that’s sent to mainnet to register. I remember wondering the same thing when I was setting up my pool. This is where you make the transaction that’s used:

1 Like

Thank you … So then, the call to create the cert actually recreates and encodes the same stake address in the certification, and once put in the transaction and run on the mainnet, that cborhex is decoded and the sake.addr revealed, and registered/created on the chain?
This would make sense, but then I think if I were to create a new stake address it would always be the same if created from the same keys, or how would the call to create the certification know what stake address to encode and embed in the CborHex field?

I’m just trying to understand this before I make a pledge. It’s still a little unclear.

Yes I believe that is correct. Your stake.addr comes from your stake.vkey. You’ll later create a delegation certificate that delegates the stake address associated with your stake.vkey to your pool.

One more thing to note is when you make your pledge your funds don’t actually leave your payment.addr. It’s just a promise to leave those funds in place to operate the pool.

1 Like

Kudos @Jennifer_Marston you really get into it.

Here another thing you may want to ponder about …

Every time you touch an *.skey it may get compromised, either in transit, in storage or else. Ideally, you would not want to even have these sensitive *.skeys. Instead, you could use a HW wallet to setup your pool and perhaps most importantly to handle your owner stake/pledge. If this resonates with you, have a look at this.

1 Like

Thanks. And if it helps any others trying to understand, I found these two high-level documents that explain the 1:1 relationship of stake keys and rewards address.
Section 3.1 of:

and here: