Delegation tokenization module, a native Cosmos-SDK module which allows delegations to be tokenized to fungible and NFT tokens
- Each delegation has different
- Validator to stake on
- Accumulated rewards
- Risk of double signing
- How we can standardize staked atom into universal one token?
- Module Name : DelegationTokenization Module
- Utility
- Delegators can tokenize their delegation into
FTokenandYToken - Tokenized delegations either can be redeemed or auctioned to any
FTokenholder after maturity
- Delegators can tokenize their delegation into
- Basic Analogy of each token
FToken- It has potential rights to redeem tokenized delegation whose maturity is passed
- The time schedule of redeem right
- If you are holding
FToken, someone is definitely holdingYTokenwithoutFToken - This
YTokenrelated delegation will be auctionized after its maturity - Therefore, "EVERY"
FTokenwill get its redeem right no longer than the maturity length - So,
FTokencan be viewed as a kind of "FORWARD CONTRACT" on delegation
- If you are holding
YTokenYTokenholders can enjoy very high yield rate with high slashing risk- But
YTokenholder should redeem delegation or get auctioned byFTokenholders after maturity
- Description : a delegation with 100 bonded Atoms splitted into two kinds of tokens
FToken: Fungible delegation tokenYToken: Non-fungible delegation yield token uniquely mapped to this delegation- 100 Atom delegation = 90
FToken+ theYTokenNFT
- Delegation ownership transfered to module account
- Ytom holder can transfer the
YTokenNFT to other addresses - Ownership of
YTokenis stored inTokenizedDelegationobject - YToken is not transferable when tokenization status is not in
Tokenized
- Before maturity
- redeem requestor sends 90
FTokenand theYTokenNFT to the module account- sent
FTokenandYTokenare burnt - delegation ownership transfered to redeem requestor
- including all accumulated and automatically withdrawed rewards
- sent
- redeemed
TokenizedDelegationis deleted
- redeem requestor sends 90
- After maturity or Automated unbonding triggered
- auction held for the delegation ownership
- payment token :
FToken - starting price : 90
FTokenand goes up - auction period : 20,000 blocks (about 33 hours)
- payment token :
- hook execution after auction completion
- final auction winning price = 90 + X
FToken - X
FTokensent toYTokenholder - 90
FTokenburnt - the
YTokenburnt (whoever is holding) - delegation ownership transfered to auction winner
- including all accumulated and automatically withdrawed rewards
- final auction winning price = 90 + X
- if auction has no winner after auction period?
- sudden death auction started
- anyone paying 90 or more
FTokenwill immediately get delegation ownership
- anyone paying 90 or more
- sudden death auction started
- auction held for the delegation ownership
- If
FTokenprice is much cheaper than Atom price- Traders buy
FTokenand participate onTokenizedDelegationauctions
- Traders buy
- If
FTokenprice is much more expensive than Atom price- Traders tokenize delegations and sell created
FTokenin the market
- Traders tokenize delegations and sell created
- If
YTokenprice is much cheaper than its intrinsic value- Traders buy
YTokenand appropriateFTokento redeem the delegation
- Traders buy
- If
YTokenprice is much more expensive than its intrinsic value- Traders tokenize delegations and sell created
YTokenin the market
- Traders tokenize delegations and sell created
-
assumptions
OriginalBondedTokenAmount= 100 Atom- accrued rewards at maturity = R Atom
-
variables
- X(0) :
FTokenprice in Atom at tokenization - X(m) :
FTokenprice in Atom at maturity - Y(0) :
YTokenprice in Atom at tokenization - Y(m) :
YTokenprice in Atom at maturity
- X(0) :
-
equations
① at tokenization : 90*X(0) + Y(0) = 100
② redeem just before maturity : 90*X(m) + Y(m) = 100+R
③ expected auction winning price = (100+R) Atom = (100+R)/X(m)
FToken④ amount receivable by
YTokenholder after auction = Y(m) = (100+R)/X(m) - 90FToken⑤ combining ② and ④ gives
- 90*X(m)^2 - (190+R)*X(m) + (100+R) = 0
- solving above quadratic equation yields : X(m) is always equal to 1 for any R
- X(0) = X(m) because they are fungible
- Y(0) = 10 from ①
- Y(m) = 10+R → only
YTokengets all the rewards
TokenizedDelegationDelegationIndex- pointing the delegation object which is tokenized
OriginalBondedTokenAmount- the amount of token bonded at the time of tokenization
NFTOwner- the account address of
YTokenowner
- the account address of
Maturity- the maturity of this
TokenizedDelegation
- the maturity of this
StatusTokenized/AuctionPeriod/SuddenDeath/Redeemed
DelegationAuctionDelegationIndex- pointing the tokenized delegation object to be auctioned
Maturity- block height when the auction finalized
- when 0, the auction entered
SuddenDeathstatus
MinBidPrice- the minimum bid price =
OriginalBondedTokenAmount* 0.9
- the minimum bid price =
HighestBidPrice- the latest highest bid price
MsgDelegationTokenizationTokenizationRequestor- the account address of tokenization requestor
DelegationIndex- pointing the delegation object to be tokenized
MsgSendYTokenSender- the account address of
YTokensender
- the account address of
Receiver- the account address of
YTokenreceiver
- the account address of
DelegationIndex- pointing the delegation object which YToken ownership is being transfered
MsgRedeemDelegationRedeemRequestor- the account address of redeem requestor
RedeemFToken- sending
FTokenfor redemption
- sending
DelegationIndex- pointing the delegation object which
YTokenownership is being transfered
- pointing the delegation object which
MsgDelegationAuctionBidBidder- the account address of the bidder
DelegationIndex- pointing the tokenized delegation object which is under auction to be participated
BidPrice- the bid price in
FToken
- the bid price in
MsgGovVoteFromYTokenOwnerDelegationIndex- pointing the tokenized delegation object which represents the governance voting power of the
YTokenholder
- pointing the tokenized delegation object which represents the governance voting power of the
ProposalID- ID of target proposal to be voted for
Vote- vote decision option chosen by
YTokenowner
- vote decision option chosen by
- Problem
- Because the ownership of delegation is transfered to a module account, it is undecided who has the governance voting right
- Proposed Solution
- As unstake Atom does not have any governance right, it is natural that
FTokenholders also do not possess any governance voting rights - Instead, because the
YTokenholders have full benefit of rewards and full responsibility of slashing,YTokenowner should have the governance voting right - If the ownership of
YTokenis changed during voting period, the new owner can overwrite the governance voting
- As unstake Atom does not have any governance right, it is natural that
- Process
MsgGovVoteFromYTokenOwneris sent to the DelTokenization module- The module account votes on the given governance proposal on the behalf of
YTokenowner
- Problem
YTokenAPR is 10 times amplified, resulting in more sensitive market response for different commission rates on each validator- This can cause a strong tendency of
- over-pricing of
YTokenwith lower commission rate validator - under-pricing of
YTokenwith higher commission rate validator
- over-pricing of
- These tendency can lead to the validator power centralization, because of pricing imbalance of each
YToken
- Discussion
- The possible risk of validator power centralization is a result of the nature of selfish incentive motivation of any human being
- Therefore, it is not caused by tokenization of delegation, but by the human nature
- Can we prevent validator power centralization somehow?