由于工作的需要,近期需要浏览大量的国内主流的链,比如说,最近就在研究 cosmos。这里我打算出一些列的cosmos源码分析,本文先是cosmos源码分析的开胃菜,我们先来从总体上了解下 cosmos,可能后续还会有 波卡的源码分析。
跨链、解决多个不通的区块链间的价值传递
网络的组成拓扑
图一:
图二:
由 cosmos hub 加上多个 zone 组成
由上层的 cosmos-sdk 加 底层的 tendermint 组成。
其中 cosmos-sdk 是主要给第三方链提供接入到cosmos 网络的sdk,而 tendermint 是将 BFT + POS 共识独立出来的模块 。第三方链如果只想做应用拓展开发,而不想关心底层共识细节的话,可以基于 tendermint 来实现自己的区块链;如果一个第三方链想和另外一个第三方链做交互的话,则需要这两个第三方链都接入cosmos网络,接入的方式为,各自引入 cosmos-sdk 即可将自己对接到 cosmos hub 上,再由cosmos hub 来作为中继器提供两条第三方链做相互交互。其中 cosmos-sdk 底层已经是基于 tendermint 的。详细的我们下面讲如何做到跨链。ProposalVoteTx
对于接入了cosmos-sdk的第三方链来说,他们就成为了cosmos网络的 zone,而裸奔的cosmos-sdk 就是目前cosmos的第一个主网 gaia,也是cosmos网络中的 hub。zone 和 hub之间通过 IBC 进行通信。而上层的sdk 和底层的共识使用 ABCI 进行交互。共同组成了整个cosmos网络。
1、baseApp:
用来和底层tendermint交互
2、多币账户:
Atom主要用来质押,Photon 只要做交易手续费,支持外来币加入白名单后做交易手续费。
3、staking:
POS 相关的实现,包括:绑定,解绑,通货膨胀,费用等操作。
4、governance:
Atom代币持有人可以通过签署一个特殊类型的交易来提交提案,并表明他们是否批准(或不批准)提交给区块链网络的提案。任何人都可以向系统提交文本提案。不过,如果你提交的提案想要进入到投票阶段,则有最低存款金额要求。在投票阶段,Atom代币持有人可以就提案是否被接受进行投票。[详细可参考](https://bihu.com/article/1877947910)
5、bank:
定义资产的转移
6、auth:
定义了一个标准的多资产账户结构(BaseAccount),开发者可以直接嵌入自己的账户体系中。
7、slash (惩罚):
还未完善
1、永远不会分叉。
2、抗1/3拜占庭,且必须收齐(超过2/3数量) precommit才允许提交区块。
3、分叉问责制 (可以根据协议的规则进行识别和惩罚。或者,可能是法律制度。)
4、共识有需要投票,投票阶段称为PreVote和PreCommit。
Simple Tree是一个Merkle树,用于静态元素列表。如果物品的数量不是2的幂,则一些叶子将处于不同的水平。简单树试图保持树的两侧高度相同,但左侧可能更大。如图:
使用AVL算法的变体来平衡树 ,并且所有操作都是O(log(n))不可更改的平衡二叉树)
的是为应用程序状态中的键值对提供持久存储,以便可以有效地计算确定性Merkle根哈希,类似于以太坊的 Patricia trie。
把发起方的最新区块投信息通过cosmos hub传递到接收方,目的是好让接收方获得发起方的最新 merkle root 。
跨链交易本身的信息,及其在发送方链中被打包的区块信息。
参考
目前从各个资料中没有发现清除的描述,从代码中看,目前只有一个解除惩罚锁定的入口实现
对于想要进入到投票阶段的提案,需要在提交该提案之后的两周时间内存入至少512 Atom代币,这也是进入到投票阶段的最低存款金额要求。任何Atom代币持有人都可以支持提案,并且为该提案提供存款,这意味着提案提交方不一定自己存入512 Atom代币,只要有人愿意为其出这笔“钱”即可。不过,存款必须要有垃圾邮件保护,这样当提案被接受的时候、或是两周之后未能达到最低存款限额要求的时候,支持该提案的Atom代币持有人就能够收到通知提醒。
一旦提案满足了最低存款限额要求,那么长达两周(336小时)的投票阶段就将正式启动。在此期间,Atom代币持有人可以对该提案进行投票,目前有四个投票选项,分别是“是”、“否”、“行使否决权的否定”、“弃权”。
Cosmos治理实施有一些重要细节值得关注,包括:
1、只有权益(bonded)代币才能参与治理;
2、投票权基于权益被评估,你拥有的Atom代币数量决定了你对提案决策的影响力(代币投票);
3、委托人可以继承被委托人的投票,除非委托人自己有过投票。如果委托人自己投票的话,将会覆盖验证器的决定。
根据Atom代币持有人的投票结果,如果提案被接受,那么至少需要满足以下几个条件:
1、法定人数:在投票结束的时候,超过40%的权益代币需要参与投票;
2、门槛:超过50%的参与投票代币(在排除了“弃权”投票之后)需要支持该提案(即选择的投票结果是“是”);
3、行使否决权:低于33.4%的参与投票的代币(在排除了“弃权”投票之后)对最终决定选择了“行使否决权的否决”。
如果在投票阶段结束时上述要求中有任何一项没有满足,比如法定人数没有达到,那么该提案就不能被通过。此时,这个被拒绝的提案中的存款不会被退还,而是会被纳入到社区池中。
如果提案被接受,则需要作为依赖网络验证器运行的软件一部分来实施。我们未来还会专门发布一篇文章来详细解释不同类型的提案、以及验证器会如何准确地协调、实施上述提到的那些被接受的提案。
如果你想要看看一个治理投票的典型示例,不妨可以先看看验证器团队B-Harvest的第一个治理提案,该提案是关于调整用于计算网络通胀的块时间率,以反映网络中的实际情况。(请注意:Chorus One支持该提案,因为它通过实时网络支付权益奖励,符合Cosmos白皮书中描述的内容。不过我们发现这只是一个临时解决方案,今后也会支持引入一个基于网络条件动态调整的其他提案。
总结: 链上治理可以理解为比经济模型更大的一个范畴,类似与Dao ,通过链上治理可以做到链的升级,各配置项的更改,以及外来币加入白名单。
1、cosmos hub 上通过发行代币 ATOM (相当于以太坊的ETH) 和 Photon (光子类似与以太坊的gas)
2、持有ATOM的人都可以通过质押(锁定)ATOM来竞选成为验证人,目前只有质押权重为前100名,才能成为验证人,后续通过链上治理可以达到上限的300名验证人。具体的为:在最开始的时候被内置门槛为100名,这个数字将在10年内以13%的速率增加,并且在300个验证人上限。
3、验证人有资格成为提议人参与出块,而单纯的验证人则共识和验证区块。成为提议人出块成功被链上接受,则可以获取出块奖励及交易手续费的分红。
4、持有ATOM的人也可以通过质押ATOM获取投票成为委托人 ,委托人将自己的选票投给心仪的验证人,当验证人获取出块奖励及交易手续费分红时,委托人也获取一定比例的分红。
5、限制:
只有达到前100明才可以有资格成为提议人出块,解除质押需要等待三周。
6、白皮书上写的:
在创世块中的ATOM和验证人的初始分布将为:
Cosmos团队共计发行2亿枚Atom,其中,首次代币(众筹参与者持有)发行占75%,天使投资人(预售参与者持有)5%,ICF基金会(ALL IN BITS 集团持有 )10%,团队保留10%。 往后每年ATOM总量的1/3将奖励给验证人和委托人。 可以查看
7、鼓励黑客:
Cosmos Hub鼓励黑客通过一项ReportHackTx 交易发布成功的漏洞,该交易说:“此验证器被黑客入侵。请将赏金发送到此地址“。从而获取奖励,奖励从被黑客攻击的验证人及其委托人的质押金上扣减。
8、收益主要有:
增发收益+出块奖励+交易手续费。
9、Atom通胀的比例在7%到20%之间变化:若系统只有很少的Atom被用作抵押,则通胀比率高达 20%。当系统抵押比例达到2/3后,通胀比例将固定为7%
10、Photon是奖励给Cosmos网络验证人的。Photon可以用来支付Cosmos生态系统中任一空间的手续费。Photon以500枚/小时的固定速度生产出来,这一速度下Photon的通胀速度趋近于零。
11、Atom的 “通货膨胀”:
为了鼓励 Atom 持有者将代币用做抵押而不是在市场上交易,抵押的 Atom 会按照一定比例通胀,越来越多。也就是说如果你没有把 Atom 用作抵押,那么它的价值将逐渐被稀释。每年的通胀率将[在7–20%]之间,取决于抵押ATOM的总数。如果超过 2/3 Atom 参与 Staking,则增发率最低 7%,如果小于 2/3Atom 参与 Staking,则增发率最高 20%。
支持跨链,支持价值转移。
1、支持跨链理想很强大,实现起来比较难
2、链上治理也是一样。