This post explains about delegation tokenization on Cosmos-SDK. The contents are composed of 1) Context, 2) General Effects and Risks, 3) Possible Design Options, and 4) Technical Specs.
- Most newly born public blockchains adopt proof of stake, especially delegated proof of stake
- dPoS has demonstrated the most stable and secure concensus mechanism for past several years
- Most staked assets in dPoS blockchains are locked in the blockchain protocols
- Unlocking the staked assets have great economic potential to thrive growth of investment and use-cases in dPoS networks
- There should exist very secure support from the core blockchain modules for liquid staking
- Simple delegation tokenization feature on dPoS is necessary to
- allow many staking derivatives applications to bring innovated financial utilities
- with securely built base layer protocol as a building block
- The base layer delegation tokenization should have simple and general design
- Delegation assets have below multiple risk/return sub-profiles
- Staking Return
- Inflationary(or non-inflationary) staking token rewards
- Gas fee distribution
- Staking Fee
- Validator commission fee
- Risk
- Slashing risk : double signing, down time
- Staking Return
- Non-fungibility of delegation assets across validators
- Each validator has different staking return, staking fee, and slashing risk
- Non-fungibility over same validator
- Different beginning/ending block height for staking
- Different reward withdrawal activities from delegators
- Fungibility of delegation assets over same validator
- For given identical staking period, all risk/return profiles are fungible over same validator
- Standardization of staking periods will allow the modules to make delegation fungible over same validator
- Simplest design possible
- The base layer Cosmos-SDK feature should have the most minimal and simplest design
- The model should allow most other blockchains, which utilize Cosmos-SDK, to adopt the feature without problems
- The model should not demand strong assumptions on staking environment for maximal generalization
- Transferable fungible tokens from delegation assets tokenization
- The delegation tokens should be transferable not only inside the Cosmos Hub, but also to different networks via IBC
- The delegation tokens should be fungible tokens for better trading standard and liquidity
- Staking returns and risks are fungible for delegations upon same validator
- The base layer should provide validator-based fungible delegation tokens for a minimal building block
- Further synthetic process from staking derivatives can create more fungible delegation tokens over multiple validators
- Even though staking returns and risks are fungible over same validator, they are not fungible over different staking periods
- Therefore, we need to have a standardized staking period so that the returns are fungible inside the selected staking period
- Attack vectors on minting/burning delegation tokens
- Malfunctioning upon slashing events
- Validator set centralization
- There will exist some staking derivatives products which amplify the difference of staking returns from different validators
- It might lead to accelerate validator set centralization towards low or free commission fee
- Governance vote buying
- Some staking derivatives products can allow users to buy/sell governance voting rights
- Staking derivatives products
- After we have base layer delegation tokenization, lots of staking derivatives can be provided from different blockchains
- Migration of delegation tokens to different networks
- Some of the delegation tokens will be transferred to different networks to use such new staking derivatives products
- Hacking risk on staking derivatives
- New staking derivatives in other blockchains can be hacked or manipulated so that significant amount of delegation tokens can be stolen
- Threat to the Cosmos Hub security
- Stolen delegation tokens can threat the security of dPoS on the Cosmos Hub
- Every delegation share becomes transferable fungible token called
DelegationToken
- Fungibility is over same validator
TokenizedDelegation
andRedeemDelegation
are only happening atDelegationTokenizationBlock
TokenizationPeriod
- This is a governance parameter representing the frequency of
DelegationTokenizationBlock
- The default value can be 400,000 blocks(about a month)
- This is a governance parameter representing the frequency of
TokenizeDelegation
:DelegationToken
mintingDelegationToken
minting happens at nextDelegationTokenizationBlock
MsgDelegationQueue
: queue tokenization at nextDelegationTokenizationBlock
RedeemDelegation
:DelegationToken
burning- Redemption of delegation is calculated from the proportion at last
DelegationTokenizationBlock
MsgUnDelegationQueue
: queue redemption at nextDelegationTokenizationBlock
- Redemption of delegation is calculated from the proportion at last
- Periodic rewards withdrawal from module account
- At every
DelegationTokenizationBlock
the module withdraw all accumulated rewards in everyTokenizedDelegation
- At every
- Bonding-token rewards management
- Periodically auto-rebonded at
DelegationTokenizationBlock
- Periodically auto-rebonded at
- Non-bonding-token rewards management
PeriodicRewardsPool
: The module stores the withdrawn non-bonding-token rewards to eachPeriodicRewardsPool
PeriodicRewardsPool
exists for each validator and eachTokenizationPeriod
RewardCoupon
: The rights to pull periodically accumulated non-bonding-token rewardsRewardCoupon
is fungible over same validator and same period- The
RewardCoupon
for thisPeriodicRewardsPool
is minted and sent to DelegationToken owners
- Reward withdraw request from
RewardCoupon
holdersRewardCoupon
holders can request immediate withdrawal of rewards stored inPeriodicRewardsPool
- Used
RewardCoupon
is burnt
- Validator addresses have additional reward factor : commission rewards
- Therefore, it is not fungible with other delegations → Prohibit delegation tokenization by validator addresses
MaxDelegationTokenizationRatio
DelegationTokenizationRatio
= total tokenized delegation amount / total delegation amount- If
DelegationTokenizationRatio
≥MaxDelegationTokenizationRatio
- Any
TokenizeDelegation
is failed
- Any
-
New function needed :
ChangeDelegatorAddr()
- Upon tokenization and redemption, the ownership of delegation is transferred between users and module account
- So, there should exist such function so that the new module can handle the ownership of delegation
- This function also should handle necessary delegation merge process if the changed owner already has delegation from same validator
- withdraw all rewards
- merge delegation to one object
-
New function needed :
SplitDelegation()
- When remeption is requested from
DelegationToken
owner, a proportion of total delegation in the module account should be transferred to the redemption requestor - In this process, the delegation in the module account should be splitted so that only the proportion of delegation ownership can be transferred
- When remeption is requested from