什么是质押?Coinbase这么说:
质押的功能与挖矿类似,它是一个网络参与者被选中将最新一批交易添加到区块链上并赚取一些加密货币作为交换的过程。质押者还帮助区块链确定哪些区块是有效的。
质押一般对任何想参与的人开放。也就是说,成为一个完整的验证者可能需要最低数量的代币,技术知识,以及一台可以在不停机的情况下日夜进行验证的专用电脑。
为了简化事情,用户可以将他们的代币委托给验证者,仍然可以获得奖励,这样就不需要设置自己的复杂的基础设施。

我探索Cosmos生态系统有一段时间了,一直在玩他们的Staking APIs。Cosmos的文档并不那么容易理解,对于一个只想了解用户在执行不同的质押API时发生了什么的人来说,整个文档非常分散。在这篇文章中,我将试图简化这些操作。
Cosmos质押包括一堆操作,但我将重点介绍以下内容:
- 委托:将资金委托给一个验证人
- 解除委托:从验证人那里解除委托的代币
- 提取奖励:提取由委托代币产生的奖励
- 重新委托:改变被委托代币的验证人
在我们详细讨论每个操作之前,有一个基于Cosmos链的ModuleAccount的概念。这些账户被定义在创世文件中,所以每当有人想运行他们自己的验证器时,他们会使用这个创世文件来设置模块账户。对于授权的目的,有三个账户对我们很重要:
- BONDED_TOKEN_POOL:当你将资金委托给一个验证人时,这些账户的余额会增加。
- NON_BONDED_TOKEN_POOL:当你取消委托时,这个账户的余额会增加(而BONDED_TOKEN_POOL账户的余额会以同样的金额减少)。你的未授权金额一直在这个账户中,直到担保期结束。
- 分发:这个账户持有奖励余额,直到奖励被提取,这个账户的余额就会减少。
对于cosmos主网
- BONDED_TOKEN_POOL: cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh
- NON_BONDED_TOKEN_POOL: cosmos1tygms3xhhs3yv487phx3dw4a95jn7t7lpm470r
- DISTRIBUTION: cosmos1jv65s3grqf6v6jl3dp4t6c9t9rk99cd88lyufl
让我们深入了解每一项操作。
委托
该操作用于将代币委托给一个验证器。它需要一个委托者地址、验证者地址和代币数量。下面是消息的样子
msgDeledate := staking.MsgDelegate { DelegatorAddress: "cosmos1yvtps9pzmr2wslyq3zv2zk5hn29eestlekwhsx", ValidatorAddress: "cosmosvaloper1sjllsnramtg3ewxqwwrwjxfgc4n4ef9u2lcnj0", Amount: "4000000uatom" }
当我们执行这个交易时,可用余额会被减少,并达到质押的金额。在幕后,BONDED_TOKEN_POOL账户的余额增加了相同的金额,因为代币被转移到这个账户。

由于委托已经开始,奖励将在DISTRIBUTION账户中不断累积,我们将在委托人的账户质押奖励余额中看到这一点。

帐户
还有一种情况,就是委托人账户有一个未被认领的奖励。除了新的委托,奖励将被自动认领,代币将从分配账户转移到委托者账户,增加委托者账户的可用余额。

解除授权
该操作用于从验证器中撤销代币的委托。它需要一个委托者地址、一个验证者地址和一个金额。下面是消息的样子
msgUndeledate := staking.MsgUndelegate {
DelegatorAddress: "cosmos1yvtps9pzmr2wslyq3zv2zk5hn29eestlekwhsx",
ValidatorAddress: "cosmosvaloper156gqf9837u7d4c4678yt3rl4ls9c5vuursrrzf",
Amount: "564960243uatom"
}
当你执行这个交易时,代币从BONDED_TOKEN_POOL转到NON_BONDED_TOKEN_POOL,这增加了NON_BONDED_TOKEN_POOL的余额并减少了BONDED_TOKEN_POOL的余额。


对于一个委托人来说,质押的余额会减少,未质押的余额会增加同样的金额。这对可用余额没有任何影响。但如果有一个待领的奖励,该奖励将被自动领走,你将观察到类似于委托人的行为。
在绑定期(21天)之后,委托人的可用余额会增加,未绑定的地址会减少相同的金额。代币会从NON_BONDED_TOKEN_POOL转移到委托人。
提取奖励
该操作用于提取当前的质押奖励金额。它需要一个委托人地址和一个验证人地址。下面是信息的样子
msgWithdraw := staking.MsgWithdrawDelegatorReward {
DelegatorAddress: "cosmos1yvtps9pzmr2wslyq3zv2zk5hn29eestlekwhsx",
ValidatorAddress: "cosmosvaloper156gqf9837u7d4c4678yt3rl4ls9c5vuursrrzf"
}
当我们执行这项交易时,代币将从DISTRIBUTION账户转到委托人地址,委托人账户的可用余额将增加奖励金额。

重新授权
该操作用于改变委托代币的验证器。它需要一个委托人地址,一个源验证,一个目标验证器,以及一个金额。下面是消息的样子
msgRedelegate := staking.MsgBeginRedelegate {
DelegatorAddress: "cosmos15t8tzmaevw063e7lud65dzr3sd74gn07uf3h8l",
ValidatorSrcAddress: "cosmosvaloper1tflk30mq5vgqjdly92kkhhq3raev2hnz6eete3",
ValidatorDstAddress: "cosmosvaloper1tflk30mq5vgqjdly92kkhhq3raev2hnz6eete3",
Amount: "1000000uatom"
}
当我们执行这个交易时,模块账户中的余额没有变化,因为我们正在重新委托代币。我们只是将该代币金额委托给一个新的验证者。在这个事件中,我们也像其他自动认领事件一样自动认领任何现有的奖励。
如果你想了解更多,请检查所有操作中列出的所有交易,你将能够看到所有事件的细节。
这只是你在Comsos质押中可以做的事情的冰山一角,但我希望这对你有帮助,并使你清楚基本的质押在Comsos领域是如何运作的。
所有评论