2 Cosmos Sdk

- 1 min

cosmos sdk

alt text

架构分为: 网络层, 共识层, 应用层

网络和共识层都是再tendermint-core里面实现的

  1. 不同的区块链节点通过网络层进行互通(交换交易信息)
  2. 然后在consensus layer 打包出块
  3. 被确认的区块通过ABCI交给应用层进行处理

tendermint-core时序图

alt text

蓝色是abci的逻辑

黑色是非abci的逻辑

白色是tendermint-core的逻辑

橙色是验证者节点的逻辑

重点(要背)

  1. 用户发起交易 -> 区块链节点
  2. 区块链节点接受到交易, 放入自己的tendermint的mempool cache里面
  3. tendermint通过abci调用checktx, 交给cosmos-sdk的应用层, 检查交易是否合法,
  4. 如果合法则会进入tendermint 的 mempool;如果不合法就会被拒绝
  5. 进入mempool的交易会被tendermint会通过p2p网络广播给其他节点.
  6. 大部分其他节点, 接收到这个交易之后, 通过PoS机制选举出一个proposer(这个区块的提议人)
  7. proposer就会mempool当中的交易, 打包到这个区块当中.
  8. 再把这个区块, 通过tendermint网络, 广播给其他节点
  9. 然后开始共识部分, 共识的过程主要分为两个轮次
  10. 在pre-vote阶段, 验证节点会对这个区块进行验证和投票
  11. 除了自己投票之外, 验证人节点也在监听全网其他节点的投票
  12. 当一个节点接收到的投票超过2/3, 这个时候进入pre-commit阶段
  13. pre-commit阶段也是一样的原理, 当超过2/3的节点投了yes之后, 这个区块就会被确认是一个合法的区块.达成了共识
  14. 那么接下来这个区块就被通过abci交给应用层, 运行beginBlock, deliverTx, endBlock, 最终执行commit
  15. commit执行之后, 这个区块就正式的完成了, 区块高度就会增加,

核心功能模块

alt text

验证人节点是运行在内网中的

哨兵节点是运行在外网的

验证人节点和哨兵节点通过内网VPC连接

alt text alt text

PoS-staking模块

配置参数详解


运行验证人节点, 需要有专业的运维人员, 硬件资源, 通证质押

为什么要做验证人:

做验证人的风险:

PoS-distribution模块

负责验证人和委托人的PoS收益分发

收益来自三个方面:

通证增发

cosmos hub, 委托的越高, 增发的越少. 吸引大家去质押

区块链网络的交易手续费(gas)

奖励给验证人和委托人

委托人要向验证人支付的佣金

PoS收益分发机制-被动触发

为什么是被动:

如果是主动的话, 那么将会给网络带来很大的压力

1. 提取收益的时候, 必须提取all

2. 委托, 解委托, 或者转委托的时候, 必须触发发起人的全部收益取回

3. 验证人修改佣金比例的时候, 会触发验证人以及该验证人的全部委托人的收益取回

Distribution模块-参数

PoS-slashing

这个模块会对验证人(节点运行有故障的验证人)进行惩罚

惩罚包含两个方面:

验证人被惩罚原因

参数

治理-Gov

所有的holder都能参与治理

参数

治理-upgrade

原理

在所有节点, 在预定的高度, 同时停止运行, 然后升级软件版本, 达成新的共识.

开发者要做

开发者要做

bank模块

负责处理账户之间的多资产通证管理

并跟踪特殊情况下的fake转账

如果有需要对用户的资产进行管理的时候可以参考这个模块

参数

send_enabled: 创世网络的时候设置成false, 等网络稳定之后设置成true

NFT模块

如何使用cosmos sdk开发opensea

osmosis组合了bank模块和ibc模块, 并且在这个基础上开发了dex专有链

任何开发者都可以将bank模块和nft模块组合, 开发一个nft专有链

NFT模块本身也具有非常高的可扩展性, 以太坊生态已经有非常多成熟的规范

authz

允许一个账户给另一个账户授权任意权限(相当于erc-20 approve的通用版)

自定义模块设计自己的权限管理, 比如nft租赁的场景, 可以通过authz授权承租人可以使用的nft时限,租赁期间可以对nft执行的操作等等

feegrant模块

相当于aa钱包的支付手续费的功能.

group模块

允许创建和管理链上多签账户, 对链上的某一个操作执行某个提案