As per the current protocol design, there’s a built-in slow release mechanism described to allow users not to take out their stake all at once (reference pending). The reasoning behind this post is to formulate the cons of such a mechanism and try to provide a better alternative.
The reason why slow release is important: Pocket Network want users to be able to take advantage of price fluctuations in the market or to adjust their expected bandwidth consumption with the network within a reasonable timeframe without impacting the macro-economic state of the network (e.g. a user with a large stake unstaking all at once within a short period of time of staking such amount).
The problem: By creating a slow release of the stake, the protocol will have to build-in a state change mechanism to the final database (blockchain) that’s not based on a user transaction, but derived from a past transaction which will not have any direct state change associated with it.
Proposed solution: Allow the unstake
transaction to remove stake based on a formula that takes stake age
as a parameter to determine the amount that can be unstaked.
Example implementation:
- User stakes
X
POKT in BlockA
. - User submits
unstake
transaction without specifying an amount to unstake in BlockD
(3 blocks have been confirmedstake_age = 3 blocks
). - Transaction parsing determines the amount to
unstake
based on a formula,
e.g:amount_to_unstake = total_staked / (per_block_multiplier * stake_age)
Note 1: The per_block_multiplier
doesn’t necessarily need to be fixed or arbitrary, or could be changed later with on-chain governance.
Expected effect: Every unstake
operation could work as a “claim”, providing solid context to state changes in the final database (blockchain), while leveraging transaction protection on each “claim”, as opposed to having multiple state changes triggered by a single past transaction.