密码极客 | 国内最权威的区块链技术创投社群

Cosmos SDK 文档概述:SDK设计概况

VOBCVOBC 2019-05-10 35,066 次 收藏0

Cosmos SDK设计概况

Cosmos SDK是一个在Tendermint基础上来安全开发状态机的区块链框架。SDK在核心使用Go语言开发的ABCI接口的模块。它包括了一个持久化数据存储multistore数据存储模块和处理交易的router路由模块。

下面是一个简化的流程,当交易通过DeliverTx从Tendermint发送时基于Cosmos SDK构建的顶层应用如何处理交易。

1.解码从Tendermint共识引擎收到的交易(记住在Tendermint上仅仅处理的是字节)。

2.从交易中提取消息,并进行基本的正常检查。

3.将每条消息通过路由传递到适当的模块,以便对其进行处理。

4.提交状态更改。

应用程序还允许创建交易,对它们进行编码,并将它们传递给底层Tendermint引擎来广播它们。

Baseapp

baseApp是Cosmos SDK ABCI接口的案例实现,它还包含一个router去将交易路由到它们各自的模块处理。你的应用程序的主程序文件app.go将会自定义你的app类型来嵌入baseapp。通过这种方法,你的自定义app 类型将会自动继承baseapp的ABCI方法。了解这个例子请看SDK 应用教程

base app的目标是在存储和可扩展的状态机之间提供一个安全的接口,同时尽可能少地定义状态机(保持对ABCI的原生性)。

想要了解更多baseapp,请点击

Multistore

Cosmos SDK提供多种方式存储来实现持久化存储。多种存储方式意味着允许开发者声明任意数量的KVStores。KVStores存储只接受字节类型数组([]BYTE)的值。也就是说,任何自定义的数据结构在被存储前都需要使用go-amino进行序列化。

Multistore抽象上来说被用来将状态划分为不同的分区,每一个分区有自己的模块来管理。想要了解更多Multistore,请点击这儿

Modules

Cosmos SDK的强大之处在于它的模块化,SDK应用被一堆可互操作的模块构建。每个模块定义了状态的子集和包含了与自己有关的消息/交易处理程序,而SDK负责将每一个消息路由到与它们有关的模块。

这是一个简单的流程图,当接受到一个可用的区块时,每一个全节点的应用如何处理交易过程。

(译者注:交易由Tendermint engine通过DeliverTx发送到应用程序,应用程序通过baseapp的方法解码字节数组,提取消息,分发到不同路由模块,模块处理消息更新状态,返回成功结果到Tendermint)

每一个模块都可以被视为最小的状态机。开发者需要定义每一个模块可以处理的状态的子集,同样需要自定义修改状态的消息类型(注意:消息使用baseapp的方法从交易中提取)。在实践中,每一个模块通常都声明它们自己的键值存储KVStore在multistore中实现状态子集的持久存储。绝大多数开发者在开发自己的模块时会需要引入第三方模块,考虑到Cosmos-SDK是一个开放的框架,一些模块可能是恶意的,这意味着需要一些安全规则来控制模块之间的交互。这些原则基于面向对象,在实践中,这意味着不是为每个模块保留一个其他模块可以访问控制的列表,而是每一个模块实现一个被叫做keeper的特殊对象,通过预先定义的功能来传递给其他模块。

SDK模块在SDK的x/文件夹中定义。一些核心模块包括:

x/auth:用于管理帐户和签名。

x/bank:用于启用代币和实现代币转移。

x/staking + x/slashing:用于构建POS区块链

除了x/中已经存在的模块(任何人都可以在其应用程序中使用)之外,SDK还允许您构建自己的自定义模块。您可以在本教程中查看该示例

接下来,了解有关Cosmos SDK的OCAP的安全模型的更多信息

原文地址:https://cosmos.network/docs/intro/sdk-design.html

本文系作者个人观点,转载请注明出处!
喜欢 0
支付宝扫码打赏
微信打赏

相关文章

更多

发布评论

共0条评论