Signing the stake pool registration certificate for multiple owners

Every time I update the stake pool registration certificate, I need to have …

  • stake.vkey
  • delegation.cert

from every owner. Later, when it comes to signing the Tx, I also need …

  • stake.skey

from every owner.

This could be problematic if there isn’t sufficient trust between me and the holder of the stake.skey, because having that key would allow me to withdraw all rewards from that owner’s stake address.

Is there a way, that the Tx can be signed by each of owners independently i.e. I sign first, then I give the partially signed Tx to next owner who signs without revealing his/her stake.skey, and so on … ?

3 Likes

The owner account wont have any reward, every reward goes to the operators reward account. And yes trust requires between spo an owner. As spo might wont sent the reward to the owner at all (as that is manual process) while the owner can move its fund (pledge) off from that pool, which means operator (the pool) could not get any reward if the pledge balance goes below the declared value by that off move.

Yes, there is some solution even for HW wallets, using cardano-hw-cli, but afaik the HW wallet solution works only with one owner, but it needs technical skill from the owner side too.

To be honest, I do not know the details as I have not tried i.e. I am the owners too ow my pool, though with multiple pledges on HW wallets.

I’m currently running [ASTOR] with this setup …

 #1  --pool-reward-account-verification-key-file /var/cardano/local/keys/${OWNER_TDI}/stake.vkey \
 #1  --pool-owner-stake-verification-key-file /var/cardano/local/keys/${OWNER_TDI}/stake.vkey \
 #2  --pool-owner-stake-verification-key-file /var/cardano/local/keys/${OWNER_SSI}/stake.vkey \

I noticed that the fix reward (340 A) goes to #1 and a fraction of the margin (2%) that is proportional to my stake also goes to #1. A friend of mine who is the other owner gets the other part of the margin payed to #2. This is all automatic, but still my friend needs to trust me to the extend that I won’t run off with his rewards because I also have access to his stake.skey (which I need for signing the pool-registration.cert Tx). This only works because we’ve been friends for many years.

This HW wallet thing sounds interesting, would you perhaps have a link to more information about this? Ideally, I’d like to have no access to any *.skey other than my own.

Is it this one, you were talking about …

Here comes some examples.

1 Like

#1 makes sense
#2 does not make sense. Do not get confused by the pooltool’s or adapools views those are misleading, they just help to the owners to see what is their part of the reward, but that is sent to operator’s reward/account address only (automatically).

The reason is why, because the pool rewards only split (automatically) between two actors:

  • the operators. The operator will automatically get the
    • cost C
    • pledge margin of the pool (f-c)m* pledge/pool_stake
    • plus the margin of the members the (f-c)(1-m)*pledge/pool_stake i.e. reward minus their margin.
  • and pool members excluding owners. Which only will get the:
    • (f-c)(1-m) * their_stake/pool_stake i.e. reward minus members margin. It’s a bit more complicated, as this reward is based on the rest part of the pool reward (R-operator’s part) .

The easier to prove is using Daedalus: start it and just click to Delegation Center → Rewards and the pledge rewards won’t change, assuming operator reward address is different than the owner’s pledge address.

Let me try to clarify this a little better (just for my understanding). We have

  • Stake Pool Operator (SPO)
  • Pool Owners
  • Delegators

The SPO is also an owner. So we have two stake.vkeys registered.

#1  --pool-owner-stake-verification-key-file /var/cardano/local/keys/${OWNER_TDI}/stake.vkey
#2  --pool-owner-stake-verification-key-file /var/cardano/local/keys/${OWNER_SSI}/stake.vkey

Now lets take this as an example

Untitled 2

The SPO has pledged 55k and owner B has pledged 200k. There has nothing else been delegated.

For an owner’s margin reward I would calculate …

f - delegator reward
c - fix margin (cost)
m - margin
o - owner stake
p - reward stake

f * m * o / p

A: 717.62 * 0.02 * 55 / 255 => 3.10
B: 717.62 * 0.02 * 200 / 255 => 11.25

This leaves a reward to be distributed proportionally among all delegators (including owners) of …

717.62 - 14.35 => 703.27

Because there aren’t any other delegators, we have …

A: 703.27 * 55 / 255 => 151.82
B: 703.27 * 200 / 255 => 551.45

Because A is also the SPO we get in total …

A: 3.10 + 151.82 + 340 => 494.91
B: 11.25 + 551.45 => 562.71

This has been payed out by the network automatically here and here.

There is a slight discrepancy, that the network has payed out 494.77 instead of 494.91 which I attribute to rounding errors because o and p might not have been the exact numbers from above.

Because both owners have pledged all their respective stake there is no difference in pledge and active stake. I read that there is a slight advantage of having a larger pledge, which is not accounted for in the simple calculations above. Perhaps you could say a few words about what difference pledging lower amounts would have made?

The important part for me is that (as an SPO) I don’t have to handle reward payout and the network is handling this just fine.

It is a little problematic however, that I also need to have the stake.skey for B, which gives me access to rewards that are not mine. As mentioned above, I need that key to sign the pool’s registration certificate Tx.

Perhaps that HW wallet thing can provide a solution for that - I’ll look into it and post here when I find something.

Thank you again for your time

1 Like

I just checked and it seems that your cert /w two owners was first applied on 20th of December, and your first block was created on 29th of december. It can mean that your friend’s registered staking address was probably considered as delegator (if his registered account address was delegated to your pool before you registered it as pledge) and not as owners address in the block creation epoch.

But, I am curious, so pls update me when you get some rewards again, how it played out, as I can be wrong.

Yes, will surely do.

If he had been registered as a delegator, he would have got 551.45 and not also a share of the 2% margin i.e. the other 11.25. Also, I would have got the full 2% margin (i.e. 14.35) (If I understand correctly)

I have checked /w some other SPO (@werkof) who has two owners for a quite long time, and he told me that the owners do not receive any rewards automatically at all, and everything goes to the op reward account as I stated. Though, you got me confused by your confidence.:slight_smile:

2 Likes

Can confirm. Owners do not get rewards, only the operator. The latter has to pay manually. We would all have Delegators/owners otherwise.

Old topic, same answer. :smiley:

1 Like

In that case, we’d probably still want to see an alternative explanation for these two payments

for the above mentioned stake distribution. An alternative model would perhaps be a pool margin of 0% (which we had for a short time).

It reduces the reward distribution to

A: 717.62 * 55 / 255 + 340 => 494.78
B: 717.62 * 200 / 255 => 562.84

That would explain it, right?

Exactly, as the op reward will become c+R(m+(1-m))p/s = c+Rp/s and member’s R(1-m)(s-p)/s = R(s-p)/s.

But that 717.62 is (f-c) = R and the full reward therefore should be 1057.62