Merge PR #4430: update "intro docs" cn translation to 05/27

This commit is contained in:
Tiny熊 2019-05-29 20:57:23 +08:00 committed by Alexander Bezobchuk
parent 8b1d75caa2
commit 3968f63099
6 changed files with 129 additions and 63 deletions

View File

@ -0,0 +1,36 @@
# Cosmos SDK 文档
## 开始
- **[SDK 介绍](./intro/README.md)**从“高层”了解Cosmos SDK.
- **[SDK 开发教程](https://github.com/cosmos/sdk-application-tutorial)**: 一个学习 SDK 的教程。它展示了如何从头开始基于 sdk 构建区块链, 并在此过程中解释了 SDK 的基本原理。
## 开发资源
- [规范](./spec/README.md): Cosmos SDK 的模块及其他规范。
- [SDK API 参考](https://godoc.org/github.com/cosmos/cosmos-sdk): Cosmos SDK Godocs 文档 。
- [REST API 规范](https://cosmos.network/rpc/): 通过 REST 与 `gaia` 全节点交互的 API 列表。
## 创建新的 SDK 项目
若要创建新项目, 以下两个方法任选其一:
- 克隆这个 [教程](https://github.com/cosmos/sdk-application-tutorial/),如果不需要, 请不要忘记从各种文件中删除 `nameservice` 模块。
- 使用社区工具, 如 [chainkit](https://github.com/blocklayerhq/chainkit).
## Cosmos Hub
Cosmos Hub (名为 `gaia`) 文档已经迁移到[这里](https://github.com/cosmos/gaia/tree/master/docs).
## 开发语言
Cosmos-SDK 目前是用 [Golang](https://golang.org/)编写的, 尽管该框架同样可以在其他语言中实现。请联系我们获取有关资助其他语言实现的信息。
## 贡献
参考 [文档说明](https://github.com/cosmos/cosmos-sdk/blob/master/docs/DOCS_README.md) 了解构建细节及更新时注意事项。
## 版本
这份文档通过以下提交构建:

View File

@ -16,6 +16,10 @@ Please refer to the official english version of the documentation for the latest
## Progress by directory
### README.md
- Synced until commit [1c326ea5](https://github.com/cosmos/cosmos-sdk/commit/1c326ea524eade1da8771cd7e4343012203a166f) (2019-05-27)
### [`concepts`](../concepts/)
- ToDo
@ -30,7 +34,7 @@ Please refer to the official english version of the documentation for the latest
### [`intro`](../intro/)
- Synced until commit [7558f760](https://github.com/cosmos/cosmos-sdk/commit/7558f7607918b6337a8b58b8f956d6776f503138) (2019-05-13)
- Synced until commit [1c326ea5](https://github.com/cosmos/cosmos-sdk/commit/1c326ea524eade1da8771cd7e4343012203a166f) (2019-05-27)
### [`modules`](../modules/)

View File

@ -1,11 +1,31 @@
## SDK介绍
# SDK介绍
[Cosmos-SDK](https://github.com/cosmos/cosmos-sdk) 是一个架构,用于构建多资产股权证明(PoS)的区块链比如Cosmos Hub以及权益证明(PoA)的区块链。
## 什么是Cosmos SDK?
Cosmos SDK的目标是允许开发者从头开始轻松创建原生就能同其他区块链相互操作的自定义区块链。我们设想SDK是类似于npm这样的框架以在[Tendermint](https://github.com/tendermint/tendermint)之上构建安全的区块链应用程序
[Cosmos-SDK](https://github.com/cosmos/cosmos-sdk) 是一个架构,用于构建多资产股权证明(PoS)的区块链比如Cosmos Hub以及权益证明(PoA)的区块链。使用Cosmos SDK构建的区块链通常称为**特定应用区块链**
它基于两个主要原则:
+ **可组合性** 任何人都可以为Cosmos-SDK创建模块并且集成已经构建的模块就像将它们导入你的区块链应用程序那样简单。
+ **能力** SDK受基于功能的安全性的启发及多年来解决区块链状态机的经验。大多数开发人员在构建自己的模块时需要访问其他第三方模块。鉴于Cosmos-SDK是一个开放框架一些模块可能是恶意的这意味着需要安全原则来推理模块间的交互。这些原则基于对象能力。实际上这意味着不是让每个模块保留其他模块的访问控制列表而是每个模块都实现称为keeper的特殊对象这些对象可以传递给其他模块以授予预先定义的一组功能。例如如果模块A的keeper的实例被传递给模块B则后者将能够调用一些受限制的模块A的函数。每个keeper的功能由模块的开发人员定义开发人员需要根据传递到每个第三方模块的功能来理解和审计第三方模块外部代码的安全性。要深入了解请跳转到[本节](./ocap.md)。
Cosmos SDK的目标是允许开发者从头开始轻松创建原生就能同其他区块链相互操作的自定义区块链。我们设想SDK类似于Ruby-on-Rails框架之上构建应用一样可以很方便在[Tendermint](https://github.com/tendermint/tendermint)之上构建安全的区块链应用。 基于SDK的区块链通过可组合的模块构建出来的大部分模块是开源的并且可供任何开发人员使用。 任何人都可以为Cosmos-SDK 创建一个模块,集成已经构建的模块就像将它们导入到区块链应用程序一样简单。 更重要的是Cosmos SDK是一个基于**能力**capabilities的系统开发人员可以更好地了解模块之间交互的安全性。 要深入了解能力,请跳到[OCAP](./ocap.md)。
### 接着,学习[SDK应用程序架构](./sdk-app-architecture.md)
## 什么是特定应用区块链?
今天区块链的一个发展模式是像以太坊这样的虚拟机区块链,开发通常围绕着在现有区块链之上通过智能合约构建一个去中心化的应用程序。 虽然智能合约对于像单用途应用程序如ICO这样的一些场景非常有用但对于构建复杂的去中心化平台往往是不够的。 更一般地说,智能合约在灵活性、主权和性能方面受到限制。
特定应用区块链提供了与虚拟机区块链截然不同的开发模式。 特定应用区块链是一个定制的区块链来服务单个应用程序:开发人员可以自由地做出应用程序运行最佳所需的设计决策。 它们还可以提供更好的主权、安全和性能。
要了解有关特定应用区块链的更多信息,可参考[这里](./why-app-specific.md)。
## 为什么是 Cosmos SDK?
Cosmos SDK 是目前用于构建自定义的特定应用区块链的最先进的框架。 以下是一些你可能需要考虑使用 Cosmos SDK 构建去中心化应用的原因:
* SDK中默认共识引擎是 [Tendermint Core](https://github.com/tendermint/tendermint) 。 Tendermint 是已存在的最成熟也是唯一的的BFT共识引擎。 它被广泛应用于行业被认为是建立股权证明系统POS的黄金标准共识引擎。
* SDK是开源的旨在使其易于从可组合模块中构建区块链。 随着开源SDK模块生态系统的发展使用它构建复杂的去中心化平台将变得越来越容易。
* SDK 受基于能力的安全性启发,及多年来解决区块链状态机的经验。 这使得 Cosmos SDK 成为构建区块链的非常安全的环境。
* 最重要的是Cosmos SDK已经被许多特定应用区块链产品所使用。 如:[Cosmos Hub](https://hub.cosmos.network), [Iris](https://irisnet.org), [Binance Chain](https://docs.binance.org/), [Terra](https://terra.money/) or [Lino](https://lino.network/) 除此之外还有很多建立在Cosmos SDK的项目。 你可以在这里查看[生态系统](https://cosmos.network/ecosystem)。
## 开始使用 Cosmos SDK
* 了解[SDK 应用体系架构](./sdk-app-architecture.md)的详细信息
* 了解如何从头构建特定应用区块链,参考[SDK教程](/docs/tutorial) 。

View File

@ -1,33 +1,37 @@
# Object-Capability Model
# 对象能力模型(Object-Capability Model
## 介绍
在考虑安全性时,最好从特定的威胁模型开始。我们的威胁模型如下:
> 我们假设蓬勃发展的Cosmos-SDK模块生态中会包含错误或恶意的模块。
> 我们假设蓬勃发展的 Cosmos-SDK 模块生态中会包含错误或恶意的模块。
Cosmos SDK旨在通过以对象能力系统作为基础来解决此威胁。
> 对象能力系统的结构特性有利于代码设计中的模块化,并确保代码实现的可靠封装。
> 对象能力系统的结构特性有利于代码设计模块化,并确保代码实现的可靠封装。
>
> 这些结构上的特性便于分析一个对象能力程序或操作系统的某些安全属性。其中一些 - 特别是信息流属性 - 可以在对象引用和连接级别进行分析,而不依赖于对决定对象行为的代码的任何了解或分析
> 这些结构上的特性便于分析一个对象能力程序或操作系统的某些安全属性。其中一些 - 特别是信息流属性 - 可以在对象引用和连接级别进行分析,而不需要依赖于了解或分析(决定对象行为的)代码
>
> 因此,可以在存在包含未知或恶意代码的新对象的情况下建立和维护这些安全属性。
> 因此,可以在存在包含未知或(可能)恶意代码的新对象的情况下建立和维护这些安全属性。
>
> 这些结构属性源于管理对现有对象的访问的两个规则:
> 1. 只要对象A持有对象B的引用A可以向B发送一条消息
> 2. 只要对象A收到了一条包含对象C引用的消息A可以获得C的引用。根据这两条规则一个对象只有通过一条先前存在的引用链获得另一个对象的引用简而言之“只有连接才能产生连接”。
> 这些结构属性源于管理对已存在对象的访问的两个规则:
> 1. 只有在对象A持有对象B的引用A才可以向B发送一条消息
> 2. 只有对象A收到了一条包含对象C引用的消息A才可以获得C的引用。
> 根据这两条规则,一个对象只有通过一条先前存在的引用链获得另一个对象的引用,简而言之,“只有连接才能产生连接”。
查看关于[object-capabilities](http://habitatchronicles.com/2017/05/what-are-capabilities/)的文章了解更多。
关于对象能力object-capabilities可以阅读这边[文章](http://habitatchronicles.com/2017/05/what-are-capabilities/)了解更多。
严格来说Golang由于几个问题没有完全实现object-capabilities
+ 普遍有引入原始模块比如unsafe, os
+ 普遍重写模块的变量
严格来说Golang 由于几个问题没有完全实现对象能力:
+ 无处不在地引入原始基础模块比如unsafe, os
+ 无处不在地重写模块变量
+ 存在2个以上goroutine时的数据竞态漏洞可以创建非法的接口值
第一点很容易通过审计import和使用适当的依赖版本控制系统如Dep来捕获。但第二点和第三点就不容易了需要成本进行代码审核。
## 实践中的对象能力模式
## 对象能力模式实践
想法就是只暴露完成工作所需要的部分。
比如,下面的代码片段违反了对象能力原则:

View File

@ -1,10 +1,10 @@
# SDK应用程序架构
# SDK 应用程序架构
## 状态机
区块链应用的核心是[具有最终确定性的复制状态机](https://en.wikipedia.org/wiki/State_machine_replication)。
状态机是计算机科学概念,一台机器可以具有多个状态,但在任何给定时间只有一个状态,其描述了系统的当前状态,及触发这些状态转变的事务。
状态机是计算机科学概念,一台机器可以具有多个状态,但在任何给定时间只有一个`状态`,其描述了系统的当前状态,及触发这些状态转变的交易(译者注:也对应数据库中事务的概念)
给定一个状态S和交易T状态机会返回一个新的状态S'。
@ -28,43 +28,43 @@
在区块链上下文环境中,状态机是确定性的。这意味着如果你从一个给定的状态开始,重放相同顺序的交易,将始终以相同的最终状态结束。
Cosmos SDK为你提供了最大的灵活性用以定义应用程序的状态交易类型和状态转变函数。使用SDK构建状态机的过程将在接下来的章节中进行更深入细致的描述。但首先,让我们看看状态机是如何使用**Tendermint**进行复制的。
Cosmos SDK 为你提供了最大的灵活性用以定义自身应用程序的状态、交易类型和状态转换函数。在接下来的章节中会更深入细致的描述如何使用 SDK 来构建状态机。但首先,让我们看看状态机是如何使用 **Tendermint** 进行复制的。
### Tendermint
作为一个开发者你只需要使用Cosmos-SDK定义状态机[Tendermint](https://tendermint.com/docs/introduction/introduction.html)将会为你处理网络层的复制。
作为一个开发者,你只需要使用 Cosmos-SDK 定义状态机,[Tendermint](https://tendermint.com/docs/introduction/introduction.html)将会为你处理网络层的状态复制。
```
^ +-------------------------------+ ^
| | | | Built with Cosmos SDK
| | State-machine = Application | |
| | | | 通过 Cosmos SDK 构建
| | 状态机 = 应用(层) | |
| | | v
| +-------------------------------+
| | | ^
Blockchain node | | Consensus | |
链节点 | | 共识层 | |
| | | |
| +-------------------------------+ | Tendermint Core
| | | |
| | Networking | |
| | 网络层 | |
| | | |
v +-------------------------------+ v
```
Tendermint是一个与应用程序无关的引擎负责处理区块链的网络层和共识层。实际上这意味着Tendermint负责传播和排序交易字节。Tendermint Core依赖于拜占庭容错BFT算法来达成交易顺序的共识。
Tendermint是一个与应用程序无关的引擎负责处理区块链的*网络层**共识层*。实际上这意味着Tendermint负责传播和排序交易字节。Tendermint Core 依赖于拜占庭容错BFT算法来达成交易顺序的共识。要深入了解Tendermint可点击[这里](https://tendermint.com/docs/introduction/what-is-tendermint.html)。
Tendermint一致性算法同一组称为**验证人**的特殊节点一起运作。验证人负责向区块链添加交易区块。对于任何给定的区块有一组验证人V。通过算法选择V中的验证人A作为下一个区块的提议人。如果超过三分之二的V签署了[prevote](https://tendermint.com/docs/spec/consensus/consensus.html#state-machine-spec)和[precommit](https://tendermint.com/docs/spec/consensus/consensus.html#state-machine-spec),并且区块包含的所有交易都是有效的,则该区块被认为是有效的。验证人集合可以通过状态机中编写的规则进行更改。要深入了解算法,[点击](https://tendermint.com/docs/introduction/what-is-tendermint.html#consensus-overview)。
Tendermint一致性算法通过一组称为*验证人*的特殊节点一起运作。验证人负责向区块链添加交易区块。对于任何给定的区块有一组验证人V。通过算法选择V中的验证人A作为下一个区块的提议人。如果超过三分之二的V签署了[prevote](https://tendermint.com/docs/spec/consensus/consensus.html#state-machine-spec)和[precommit](https://tendermint.com/docs/spec/consensus/consensus.html#state-machine-spec),并且区块包含的所有交易都是有效的,则该区块被认为是有效的。验证人集合可以通过状态机中编写的规则进行更改。要深入了解算法,[点击](https://tendermint.com/docs/introduction/what-is-tendermint.html#consensus-overview)。
Cosmos SDK应用程序的主要部分是一个区块链服务程序,它由网络中的每个节点在其本地运行。如果验证人集合中三分之一以下的是拜占庭(即恶意的),则每个节点在同时查询状态时应获得相同的结果。
Cosmos SDK 应用程序的主要部分是一个区块链服务后台daemon它在每个网络节点的本地运行。如果验证人集合中三分之一以下的是拜占庭(即恶意的),则每个节点在同时查询状态时应获得相同的结果。
## ABCI
Tendermint通过名为[ABCI](https://github.com/tendermint/tendermint/tree/master/abci)的接口将交易从网络层传递给应用程序,这是应用程序必须要实现的
Tendermint通过名为[ABCI](https://github.com/tendermint/tendermint/tree/master/abci)的接口将交易从网络层传递给应用程序,因此应用程序必须要实现 ABCI
```
+---------------------+
| |
| Application |
| 应用 |
| |
+--------+---+--------+
^ |
@ -79,16 +79,17 @@ Tendermint通过名为[ABCI](https://github.com/tendermint/tendermint/tree/maste
+---------------------+
```
注意Tendermint仅处理交易字节。它不知道这些字节究竟是什么意思。Tendermint所做的只是对交易确定性地排序。赋予这些字节意义是应用程序的工作。Tendermint通过ABCI将交易字节传递给应用程序并期望返回代码以知晓消息是否成功。
注意Tendermint 仅处理交易字节。它不知道这些字节究竟是什么意思。Tendermint 所做的只是对交易确定性地排序。赋予这些字节意义是应用程序的工作。Tendermint通过ABCI将交易字节传递给应用程序并期望返回代码以知晓消息是否成功。
以下是ABCI中最重要的消息类型
+ `CheckTx` : 当Tendermint Core收到交易时会将其传递给应用程序以检查其有效性。一个名为“Ante Handler预处理”的特殊handler用于执行一系列验证步骤例如检查手续费用是否足够和验证签名是否合法。如果交易有效则将交易添加到[mempool交易池](https://tendermint.com/docs/spec/reactors/mempool/functionality.html#mempool-functionality)中并广播到对等节点。注意,`CheckTx`不会处理交易(即不会对状态进行修改),因为它们尚未包含在区块中。
+ `DeliverTx` : 当Tendermint Core接收到[有效区块](https://tendermint.com/docs/spec/blockchain/blockchain.html#validation)时,其中的每条交易都将通过`DeliverTx`传递给应用程序进行处理。正是在这一阶段发生了状态转换。“Ante Handler”将再次执行连同对交易中每条message进行实际处理的handler一起执行。
+ `BeginBlock`/`EndBlock` : 无论区块是否包含交易,这两个消息都将在每个区块的开头和结尾执行。触发自动的逻辑执行是很有用的。过程中要足够小心,因为计算成本高昂的循环运算可能会减慢区块链的速度,甚至在无限循环时区块链本身停滞。
- `CheckTx` : 当 Tendermint Core 收到交易时,如果符合一些的基本的要求会将其传递给应用程序。`Checkx` 用于保护全节点的交易池免受垃圾邮件的侵害。一个名为“Ante Handler”的特殊处理器用于执行一系列验证步骤例如检查手续费用是否足够和验证签名是否合法。如果交易有效则将交易添加到[交易池mempool](https://tendermint.com/docs/spec/reactors/mempool/functionality.html#mempool-functionality)中并广播到对等节点。注意, `CheckTx` 不会处理交易(即不会对修改状态),因为它们尚未包含在区块中。
- `DeliverTx` : 当 Tendermint Core 接收到[有效区块](https://tendermint.com/docs/spec/blockchain/blockchain.html#validation)时,块中的每条交易都将通过 `DeliverTx `传递给应用程序进行处理。正是在这一阶段发生了状态转换。“Ante Handler”也将连同实际处理交易中每条消息的handler一起再次执行。
- `BeginBlock`/`EndBlock` : 无论区块是否包含交易,这两个消息都将在每个区块的开头和结尾执行。触发自动的逻辑执行是很有用的。过程中要足够小心,因为计算成本高昂的循环运算可能会减慢区块链的速度,甚至发生无限循环引起区块链本身停滞。
有关ABCI方法和类型的详细介绍请[点击](https://tendermint.com/docs/spec/abci/abci.html#overview)。
有关 ABCI 方法和类型的详细介绍请[点击](https://tendermint.com/docs/spec/abci/abci.html#overview)。
在Tendermint上构建的任何应用程序都需要实现ABCI接口来同底层的本地Tendermint引擎进行通信。幸运的是你不必实现ABCI接口。Cosmos SDK以[baseapp]()的形式提供了样板实现。
Tendermint 上构建的任何应用程序都需要实现ABCI接口来同本地的底层 Tendermint 引擎进行通信。幸运的是你不用必需实现ABCI接口。Cosmos SDK以[baseapp](./sdk-design.md#baseapp)的形式提供了样板实现。
### 接下来,学习[SDK的高级设计原则](./sdk-design.md)
### 接下来,让我们学习[SDK的高级设计原则](./sdk-design.md)

View File

@ -1,46 +1,48 @@
# Cosmos SDK设计概览
# Cosmos SDK 设计概览
Cosmos SDK是一个方便开发者开发基于Tendermint的安全可靠状态机的一套框架。其核心是Golang版的ABCI的实现。它附带一个`multistore`来持久化存储数据还有一个`router`来处理事务
Cosmos SDK是一个方便开发者开发基于Tendermint的安全可靠状态机的一套框架。其核心是Golang版的ABCI的实现。它附带一个`multistore`来持久化存储数据还有一个`router`来处理交易
下面一个简单的视图展示了当从Tendermint的`DeliverTx`请求(`CheckTx`的处理流程与其相同除了不会执行状态的改变中接收到一笔交易时基于Cosmos SDK构建的应用程序是如何处理交易的
下面一个简单的视图展示了当从Tendermint的`DeliverTx`请求(`CheckTx`的处理流程与其相同除了不会执行状态的改变中接收到一笔交易时基于Cosmos SDK构建的应用程序是如何处理交易的
1. 解码从Tendermint共识引擎接收到的交易记住Tendermint只处理`[]bytes`
2. 从交易中提取消息并进行基本的合理性检查。
3. 将每条消息路由至对应的模块进行处理。
4. 提交状态变更。
该应用程序能让你生成交易,编码它们并传递给地城的Tendermint来进行广播
应用同样可以生成交易,进行编码并传递给底层的Tendermint来进行广播
## `baseapp`
`baseApp`是Cosmos SDK的ABCI的实现样板。它有一个`router`用作把交易路由到对应的模块。你的应用程序的的主体`app.go`文件将定义你自定义的`app`类型,将嵌入`baseapp`。这样,你自定义的`app`类型将自动继承`baseapp`的所有方法。阅览[SDK应用程序教程](https://github.com/cosmos/sdk-application-tutorial/blob/master/app.go#L27)。
`baseApp` 是Cosmos SDK的ABCI的实现样板。里面的 `router` 用来把交易路由到对应的模块。我们应用程序的主体文件`app.go` 将自定义`app`类型,它将嵌入`baseapp`。这样,自定义的`app`类型将自动继承`baseapp`的所有方法。阅览[SDK应用教程](https://github.com/cosmos/sdk-application-tutorial/blob/master/app.go#L27)代码示例
`baseapp`的目的是在存储和可扩展状态机之间提供安全接口同时尽可能少地定义该状态机保持对ABCI的真实性
`baseapp`的目的是在存储和可扩展状态机之间提供安全接口同时尽可能少地定义该状态机保持对ABCI的真实性
有关`baseapp`的更多信息,请点击[这里](../concepts/baseapp.md)。
## Multistore
Cosmos SDK为状态持久化提供了multistore。multistore允许开发者声明任意数量的[`KVStores`](https://github.com/blocklayerhq/chainkit)。`KVStores`只接受`[]byte`类型作为值,因此任何自定义的类型都需要在存储之前使用[go-amino](https://github.com/tendermint/go-amino)进行编码。
Cosmos SDK 为状态持久化提供了 multistore 。multistore 允许开发者声明任意数量的[`KVStores`](https://github.com/blocklayerhq/chainkit)。`KVStores`只接受`[]byte`类型作为值,因此任何自定义的类型都需要在存储之前使用[go-amino](https://github.com/tendermint/go-amino)进行编码。
multistore用于区分不同的模块的状态每个都有其模块管理。要了解更多关于multistore的信息,点击[这里](../concepts/store.md)
multistore 抽象用于区分不同的模块的状态,每个都由其自身模块管理。要了解更多关于 multistore 的信息,点击[这里](../concepts/store.md)
## Modules
Cosmos SDK的强大之处在于其模块发开发的理念。SDK应用程序通过把一组可以互相操作的模块组合起来生成。每个模块定义状态的自己并包含其自己的消息/交易处理器而SDK负责将每条消息路由到其各自归属的模块。
Cosmos SDK 的强大之处在于其模块化开发的理念。应用程序通过把一组可以互相操作的模块组合起来进行构建。每个模块定义状态子集,并包含其自己的消息/交易处理器而SDK负责将每条消息路由到其各自归属的模块。
下面是一个简化视图, 旨在说明每个应用链的全节点是如何处理接收的有效块中交易的:
```
+
|
| Transaction relayed from Tendermint
| via DeliverTx
| 交易通过全节点的 Tendermint 引擎的DeliverTx
| 传递到应用层
|
|
+---------------------v--------------------------+
| APPLICATION |
| 应用(层) |
| |
| Using baseapp's methods: Decode the Tx, |
| extract and route the message(s) |
| 用 baseapp 的方法: 解码 Tx, |
| 提取及路由消息 |
| |
+---------------------+--------------------------+
|
@ -50,16 +52,15 @@ Cosmos SDK的强大之处在于其模块发开发的理念。SDK应用程序通
|
|
|
| Message routed to the correct
| module to be processed
| 消息传给相应的模块处理
|
|
+----------------+ +---------------+ +----------------+ +------v----------+
| | | | | | | |
| AUTH MODULE | | BANK MODULE | | STAKING MODULE | | GOV MODULE |
| | | | | | | |
| | | | | | | Handles message,|
| | | | | | | Updates state |
| | | | | | | 处理消息, 更改状态 |
| | | | | | | |
| | | | | | | |
+----------------+ +---------------+ +----------------+ +------+----------+
|
@ -68,18 +69,18 @@ Cosmos SDK的强大之处在于其模块发开发的理念。SDK应用程序通
|
+--------------------------+
|
| Return result to Tendermint
| 返回结果到 Tendermint
| (0=Ok, 1=Err)
v
```
每个模块都可以看做一个小型的状态机。开发人员需要定义模块所处理的状态的自己已经用作修改状态的message类型(*注意*:message是由`baseapp`的方法从交易中提取的)。通常每个模块在multistore声明它自己的`KVStore`来持久化保存它所定义的状态子集。大多数开发者在构建自己的模块时也需要访问其他的第三方模块。鉴于Cosmos-SDK是一个开源的框架一些模块可能是恶意的这就意味着需要安全原则来合理化模块之间的交互。这些原则基于[object-capabilities](./ocap.md)。实际上这意味着不是让每个模块保留其他模块的访问控制列表而是每个模块都实现称作keeper的特殊对象这些对象可以传递给其他模块并授予预先定义的一组能。
每个模块都可以看做一个小型的状态机。开发人员需要定义模块所处理的状态的子集以及修改状态的message自定义类型(*注意* : message 是由 `baseapp` 的方法从交易中提取的)。通常,每个模块在 multistore 声明它自己的`KVStore` 来持久化保存它所定义的状态子集。大多数开发者在构建自己的模块时也需要访问其他的第三方模块。鉴于Cosmos-SDK是一个开源的框架一些模块可能是恶意的这就意味着需要安全原则来合理化模块之间的交互。这些原则基于[object-capabilities](./ocap.md)。实际上,这意味着不是让每个模块保留其他模块的访问控制列表,而是每个模块都实现称作`keeper`的特殊对象,这些对象可以传递给其他模块并授予预先定义的一组能
SDK模块在SDK的`x/`目录下定义。一些核心模块包括:
+ `x/auth`: 用于管理账户和签名.
+ `x/bank`: 用于实现token和token转账.
+ `x/staking` + `x/slashing`: 用于构建POS区块链.
除了`x/`中已有的模块,任何人都可以在他们的应用程序中使用它们自己定义的模块。你可以查看[示例教程](https://cosmos.network/docs/tutorial/keeper.html)。
除了`x/`中已有的模块,任何人都可以在他们的应用程序中使用它们自己定义的模块。你可以查看[示例教程](https://learnblockchain.cn/docs/cosmos/tutorial/04-keeper.html)。
### 接下来 学习Cosmos SDK的安全模型[ocap](./ocap.md)
### 接下来 学习 Cosmos SDK 安全模型,[ocap](./ocap.md)