I wrote this gist for the pool ops (and probably for the delegators) to understand how ranking in Daedalus or in other wallets (if they use the protocol’s non-myopic pool member rewards
for ranking) works. I assume, that there would be some errors, so happy to correct if missed or misunderstood something.
UPDATE: please read the updated doc in the gist instead of this, as that is updated and errors are corrected
The original link: Cardano Pool Ranking in Daedalus · GitHub
Cardano Pool Ranking in Daedalus
DISCLAIMER: It seems that the ranking mechanism specified in the Design Specification, and explained below, is not fully implemented and/or enabled.
Brief explanation
The ranking in Daedalus is simply based on a sorted list of the pools, which comes from the underlying backend node that Deadalus uses.
The pool list is updated each time when Daedalus (cardano-wallet
to be more precise) queries the node (using the node-to-client
mini-porotocol) with the user’s specified delegatable stake
.
The rank order is based on the pools’ calculated non-myopic pool member rewards
that are calculated either of the user specified delegatable stake
of the query and the pools characteristics (perfomance an pool parameters).
It can be thought as some dynamic ranking, when a user could always get different ranks based on the stake she or he wants to delegate when the protocol calculates non-myopic member reward
, and therefore the rank, based on that value the user specified in the GUI.
When daedalus receives the non-myopic rewards
ordered pool list (pool id
and non-myopic reward
pairs), it links the pools’ details (semi-static data queried earlier) to latest non-myopic
(dynamically queried) rewards and shows it in GUI as ranked pools (highest the reward higest the rank e.g. highest reward then the pool ranked as 1st).
Note: the slider in Daedalus is for querying the protocol for the pools’ list /w the updated
non-myopic
rewards based on the amount of ADA the users wants to delegate.
The non-myopic pool member rewards
is caclulated by the Cardano protocol as the following:
- First, it ranks (it is different than the wallet ranks) the pools by
desirability
which is based on the poolsapparent performance
(UPDATE: theaverage apparent perfromance
was considered, but IO is considering to use somehit rate estimates
) and oncost
, declaredpledge
, andmargin
pool’s parameters (the pool parameters are taken from the most recent pool registration certificate). - then, the first
nOpt
ranked pools keep their total stake (pledge
+delegated stake
) for further calculations, while the rest can keep only their pledge, this callednon-myopic stake
. - After that, for the
non-myopic
reward calculations it uses the normalpool member reward
function, but it uses thenon-myopic pool's stake
instead of the currentactive stake
of the relevant pool as thetotal delegated stakes
(i.e.sigma
) parameter in the function.
As an example below querying the protocol using cardano-wallet
listening on localhost:8090
.
# 500 ADA delegatable stake in loveloce
STAKE=500000000
# if you left empty it will show all pools
POOL_ID=abcdef77
curl -s "http://localhost:8090/v2/stake-pools?stake=$STAKE" | jq -r '.[] | [ .id, .metrics.non_myopic_member_rewards.quantity ] | @csv' | grep -n "${POOL_ID}.*,"
126:"abcdef77d812a5a397fb324f1d00325e2243c476ea8ecd2030719ae5",43796301
High level explanation
The pool ranking in Daedalus is based on the Cardano procotol’s game theoretic model that assumes that the procolol will inevitably reach an ideailistic (non-myopic
) state (Nash equilibirium
) by some time, and the rank of the pools based on their expected - non-myopic
- reward.
And therefore in this context, non-myopic
simply means, that Daedalus for ranking assumes the equilibirium in which a pool can be either part of only the nOpt
number of almost fully the saturated pools (selected) or not.
It makes sense as saturation means: stakes
delegated to pool; and if almost all nOpt
nr. of pools would be fully saturated then, there would not be any room (i.e. no stakes left) for the rest of the pools.
Therefore, the game theoritic model assumes that the selected nOpt
number (currently 150) of pools will have a high chance of being part of the equlibirium and the rest of them (the non-selected) would probably die out for long term.
Desirability
This initial selection of the pools are based on their expected reward as attractivenes
as if they would be fully saturated, which called desirability
.
It also means, that a simplified reward function is used to calculate the pools’ reward.
Note: As you can see it is not simplified, but uses
z0
as full saturation for the sigma,σ
i.e. it assumes full saturation., when
σ = z0
.
The pools desirability
are calculated from the pools’ individual apparent performance
and their monetary related pool’s parameter such as cost
, pledge
and margin
.
Note: if the caclulated
non-myopic
optimal reward is less then thecost
then the desirability is0
.
The rationale of this assumption is that these parameters have some degree of impact on the pools’ rewards that will drive the delegators toward to the pools that offer the highest return of their investment (rationale behaviour).
Non-Myopic Pool Stake
After the initial desirability
based ranking, the system assign a non-myopic pool stake
to each of the pools, based on the ranking selection.
As a result, all of the pools are - virtualy - split into two distinct groups by this non-myopic pool stake assignment.
The non-myopic stake
simply means that the first nOpt
umber of pools (currently 150) will be considered as it would have at least a saturated level of stakes for the later non-myopic
reward calculations, while the rest only can have their currently delegated owner’s stake (pledge
, keep in mind that the pledge and the pool’s stake are calculated from the current UtXO set on the time of the query and not from the active- or total stake).
The rationale of this is that those who won’t be part of the equlibirium (the non-selected pools) will loose all their delegators by the time anyway, and therefore they would have stakes only from their owner(s), while the selected ones will be inevitably saturated i.e. assumes that the system will reach the Nash equilibirium.
In simple words, the system has ranked the pools by their desirability and selected the first nOpt
number of them as the attractive ones that would be saturated
by the time and the others wont be really counted as they would have been already died out by the time the system reaches equlibirium.
Non-myopic Pool Member Rewards
The ranking in wallet is based on the non-myopic pool member reward
that is calculated for each pools based on the stake of the pool member wants to delegate, for example in the Daedalus.
This non-myopic pool member reward
is calculated by the the normal reward splitting formula of a pool, but uses the idealised non-myopic pool stake
as the total stake
instead of the actual total stake
(**also this non-myopic stake is based on the current UtxO set at the time of the query and not based on the actual total stake
).
The meaining of this above formula is that the protocol calculates the pool member reward for each of the pools relative to the member stakes (t
is the stake the user is about to delegate) to the corresponding non-myopic
pool stake, by using the following formula:
In simple words this means:
For each of the pools, the pool (non-myopic
) reward is calculated based on the pool’s pledge
, the non-myopic pool stake
which is either of:
- at least the full saturation or more if the pool is oversaturated (for the selected ones) or
- the owner(s)’ pledge (for the rest).
and the apparent performance
.
If the pool reward is less then the cost then it returns the reward
as non-myopic pool member reward
.
Otherwise, it calculates the non-myopic pool member reward
for that pool as
the non-myopic pool reward
minus cost
.
Which is multiplied by the reduced margin
of the whole.
Then it is multiplied by member stake
relative to the non-myopic pool stake
.
See details below:
(non-myopic pool reward
- cost
) times (1 - margin
) times member contributing stake
relative to the non-myopic pool stake
Wallet Ranking
In the wallet, the pool ranking is based on the specified wallet’s expected (non-myopic
) rewards for its delegated- or delegatable stake, from each of the pools.
Meaning, that a wallet would have a list of all pools that contains the caclulated non-myopic
reward that the wallet should expect. And the wallet ranking is based on this list, meaning the pool which has higher expected non-myopic
reward, will be higher in the rank.
Though, the GUI is quite misleading, as it should behave per wallet basis, and not using some slides to fine tune to what the wallet owner wants to delegate, it should be wallet specific. For example some drop down list
of the wallets Daedalus, have and rank the pools based on the wallets delegatable stakes.
This non-myopic rewards uses the normal reward function, but the total stakes of the pool, the sigma
depends on the inital ranking selection, which means that the selected ones (in some degree) would be much more attractive for the users, as their all delegated stake would be considered, while the rest only can use their stake in the non-myopic
reward caclulation.
In simple words, the wallet would sort/rank the pools based on the delegators non-myopic pool member reward
for each of the pools.
Meaning, the first in the rank would be the best choice for the delegator. This assumes rational behaviour from the delegators where
they, in general, choose from the first few pools of the ranked list.