什么是CosmosCosmosSDK是一个用于构建多资产公告权益证明(POS)的开源工具包区块链,例如CosmosHub,以及许可的权威证明POA区块链。使用CosmosSDK构建的区块链通常被称为特定于应用程序的区块链。CosmosSDK的目标是让开发人员能够轻松地从头开始创建自
Cosmos SDK是一个用于构建多资产公告权益证明(POS) 的开源工具包区块链,例如Cosmos Hub,以及许可的权威证明POA区块链。 使用Cosmos SDK构建的区块链通常被称为特定于应用程序的区块链。 Cosmos SDK 的目标是让开发人员能够轻松地从头开始创建自定义区块链,并可以与其他区块链进行本地互操作。我们进一步推进了这种模块化方法,允许开发人员即插即用不同的共识引擎,这些引擎可以是CometBFT(也叫TendermintBFT)或Rollkit。 基于 SDK 的区块链可以选择使用预定义模块或构建自己的模块。这意味着开发人员可以构建适合其特定用例的区块链,而不必担心从头开始构建区块链的底层细节。预定义模块包括质押、治理和代币发行等。 此外,Cosmos SDK 是一个基于功能的系统,可让开发人员更好地推断模块之间交互的安全性。 如下,Cosmos由一些核心的模块构成,Cosmos-SDK,CometBFT,IBC.....
一 从正确的提议者哪里接收到区块提议的全节点都通过调用ABCI函数执行FinalizeBlock 二 FinalizeBlock
解码:由于FinalizeBlock是 ABCI 调用,因此Tx以编码形式接收。节点首先使用应用程序中定义的[]byte解组交易,然后调用,这与非常相似,但也会执行并写入状态更改。TxConfigrunTxexecModeFinalizeCheckTx
检查和AnteHandler:全节点再次调用validateBasicMsgs和AnteHandler。之所以进行第二次检查,是因为他们可能在添加到 Mempool 阶段时没有看到相同的交易,而恶意提议者可能包含了无效的交易。这里的一个区别是,不会 AnteHandler与gas-prices节点的进行比较,min-gas-prices因为该值是每个节点的本地值 - 不同节点之间的不同值会产生不确定的结果。
MsgServiceRouter:退出后CheckTx,FinalizeBlock继续运行 runMsgs以完全执行Msg事务内的每个事务。由于事务可能有来自不同模块的消息,因此BaseApp需要知道在哪个模块中查找适当的处理程序。这是使用 来实现的BaseApp,MsgServiceRouter以便可以由模块的 ProtobufMsg服务进行处理。对于LegacyMsg路由,通过模块管理器Route调用该函数来检索路由名称并在模块内查找遗留。
HandlerMsg服务: ProtobufMsg服务负责执行中的每条消息Tx并使状态转换持续存在finalizeBlockState。
PostHandlers: PostHandler在消息执行后运行。如果它们失败, 的状态更改runMsgs以及 的状态PostHandlers更改都会被恢复。
Gas:Tx在交付a 时, aGasMeter用于跟踪使用了多少 gas;如果执行完成,GasUsed则在 中设置并返回 abci.ExecTxResult。如果执行因BlockGasMeter或GasMeter已用完或出现其他问题而停止,则最后的延迟函数会相应地出现错误或恐慌。
三 Consensus 四 Commit
CometBFT 是一款用于在多台机器上安全一致的复制应用程序的软件。只要不超过1/3以上的机器发生故障,CometBFT 就能正常工作。容忍机器以任意方式发生故障(包括恶意行为)的能力被称之为拜占庭容错。BFT理论已经有数十年的历史,但是软件实现最近才开始流行。这主要得益于区块链技术如“以太坊”的成功。 CometBFT 由两个主要技术组件组成 : 区块链共识引擎和通用应用程序接口。 共识引擎基于 Tentmint共识算法确保相同的交易以及相同的顺序记录到每台机器上。CometBFT 的设计目标是易于使用、简单易懂、性能卓越并且适用于各种分布式应用程序。
CometBFT 通过满足 ABCI (CometBFT 套接字协议) 的套接字与应用程序进行通信。 CometBFT 能够通过在应用程序流程和共识流程之间提供非常简单的API来分解区块链设计。 ABCI 由 3 种主要的消息类型组成。
是应用程序的主力。区块链中的每一笔交易都通过此消息传递
与DeliverTx类似,但仅用于验证交易
用于计算对当前应用程序状态的加密承诺,并将其放入下一个块头中
一个应用程序可以有多个 ABCI 套接字连接。CometBFT 为应用程序创建三个 ABCI 连接;一个用于在内存池中广播时验证交易,一个用于共识引擎运行区块提案,另一个用于查询应用程序状态。 显然,应用程序设计人员需要非常谨慎地设计其消息处理程序,以创建可执行任何有用操作的区块链,但此架构提供了一个起点。(图片来源于网络)
区块链间通信协议 (IBC) 是一种端到端、面向连接、有状态的协议,用于在未知和动态拓扑排列的异构区块链之间进行可靠、有序和经过验证的通信。 IBC 是一种允许区块链相互通信的协议。使用 IBC 的链可以共享任何类型的数据(只要数据以字节为单位编码),从而实现业界功能最丰富的跨链交互。IBC 安全且无需许可。
由上图可以得到以下结论 区块链依靠中继器进行通信。中继器是 IBC 的“物理”连接层:链下进程负责通过扫描每条链的状态、构建适当的数据报并在协议允许的对端链上执行它们,在运行 IBC 协议的两条链之间中继数据。 许多中继器可以提供一个或多个通道,在链之间发送消息。 连接的每一侧都使用另一条链的轻客户端来快速验证传入的消息
跨链安全 (ICS) 是一个开源 IBC 应用程序,允许 Cosmos 链相互租赁其权益证明安全性。 ICS 允许任何人使用提供商链中的子集甚至整个验证器集来启动消费者链。这样,提供商链验证器也会开始验证消费者链,因此消费者链会从提供商那里继承安全性和去中心化。
验证器更新。一旦在提供者和消费者链之间建立了 IBC 连接和通道,提供者将通过 IBC 持续向消费者发送验证器集更新。请注意,提供者仅发送已选择加入的验证器的更新。消费者使用这些验证器集更新来更新共识引擎(例如 CometBFT)中自己的验证器集。
削减和监禁。 如果选择加入的验证者在消费者链上行为不当,那么他们将在提供者链上受到惩罚。ICS 目前区分两种违规行为——双重签名和停机。消费者链上的双重签名会导致行为不当的验证者的提供商质押被削减并被永久监禁在提供者链上,而消费者链上的停机会导致行为不当的验证者被暂时监禁。
Interchain Accounts 是 ICS-27 协议的 Cosmos SDK 实现,支持基于 IBC 实现跨链账户管理。 跨链账户和普通账户的区别是,普通账户使用私钥来签署交易,跨链账户则通过 IBC 数据包由对方链以编程方式控制。
跨链账户认证模块(自定义或通用,例如或x/govCosmos SDK 模块)可以向控制器子模块发送消息以注册跨链账户并向跨链账户发送数据包。为此,认证模块需要如下模块组合。x/group x/auth MsgServer baseapp MsgServiceRouter
如今,关于模块化的讨论很多,关于单片和模块化的讨论也很多。最初,Cosmos SDK 的构建就考虑到了模块化的愿景。模块化源自将区块链拆分为可定制的执行层、共识层、结算层和数据可用性层,而这正是 Cosmos SDK 所实现的。这意味着开发人员可以即插即用,通过为不同的层使用不同的软件,使他们的区块链可定制。例如,您可以选择构建原始链,并使用带有 CometBFT 的 Cosmos SDK。CometBFT 将成为您的共识层,而链本身将成为结算和执行层。另一种方法是将 SDK 与 Rollkit 和 Celestia 一起使用,作为您的共识层和数据可用性层。模块化的好处是您可以根据特定用例定制您的链。
以上内容是针对Cosmos各主要模块的一个大体介绍(大家有一个粗略的概念),它里面的内容很多,后续会专门出一个专题来进行讲解。了解了cosmos,也就能够相对比较轻松的进行公链的开发。
https://docs.cosmos.network/v0.50/learn/intro/sdk-app-architecture https://github.com/cosmos https://ibc.cosmos.network/v8/
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!