cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新
第三章教程:
程序目标
你正在构建的应用程序的目标是让用户购买域名并为其设置解析的值。给定域名的所有者将是当前最高出价者。在本节中,你将了解如何将这些简单需求转化为程序的设计。
区块链应用程序只是一个具有确定性的复制状态机。作为开发人员,你只需定义状态机(即状态,启动状态和触发状态转变的消息),Tendermint将为你处理通过网络进行复制。
Tendermint是一个与应用程序无关的引擎,负责处理区块链的网络层和共识层。实际上,这意味着Tendermint负责传播和排序交易字节。Tendermint Core依赖于拜占庭容错(BFT)算法来达成交易顺序的共识。点击这里了解更多Tendermint相关信息。
Cosmos SDK旨在帮助你构建状态机。SDK是一个模块化框架,意味着应用程序是通过将一组可互操作的模块集成在一起构建而成的。每个模块都包含自己的消息/交易处理器,而SDK负责将每条消息路由到其对应模块。
以下是nameservice应用程序所需的模块:
-
auth
: 此模块定义了账户和手续费,并为你应用程序的其余部分提供了访问这些功能的权限。 -
bank
: 此模块使得应用程序能够创建和管理token及余额。 -
nameservice
: 此模块目前还不存在!其将处理你所构建的nameservice
应用的核心逻辑。它是你构建应用程序时必须使用的主要部分。
你可能会好奇为什么没有模块来处理验证人集合的变更。实际上,Tendermint依靠一组验证人来对下一个要添加至区块链的有效交易区块达成共识。默认情况下,如果没有模块处理验证集合的变更,验证人集合将与创世文件
genesis.json
中定义的验证人集合保持一致。该应用程序就是这种情况。如果要允许更改应用程序的验证人集合,可以使用SDK的'staking'模块,或编写自己的模块!
现在,看一下应用程序的两个主要部分:state(状态)和message(消息)类型。
State
state反映了特定时刻你的应用程序。它告诉了每个帐户拥有多少token,每个域名的所有者和价格,以及每个域名的解析值。
token和帐户的state由auth
和bank
模块定义,这意味着你现在不必关心它。你需要做的是定义与你的nameservice
模块特定相关部分state。
在SDK中,所有内容都存储在一个名为multistore
的存储中。可以在此multistore中创建任意数量的键值对存储(在Cosmos SDK中称作KVStore
)。你需要为你的应用存储以下:
- 一个
name
与value
的映射表。在multistore
中创建一个nameStore
来维护这个数据。 - 一个
name
与owner
的映射表。在multistore
中创建一个ownerStore
来维护这个数据。 - 一个
name
与price
的映射表。在multistore
中创建一个priceStore
来维护这个数据。
Message
message被包含在transaction中。它们负责触发state的转变。每个模块定义了一个message列表及如何去处理它们。下面这些message是你需要为你的nameservice应用去实现的:
-
MsgSetName
: 此message允许域名的所有者为指定域名的nameStore
设置一个值。 -
MsgBuyName
: 此message允许账户去购买一个域名并在ownerStore
中成为所有者。
当一条交易(包含在区块中)到达一个Tendermint节点时,它将通过ABCI传递给应用程序并被解码以得到message。然后将message路由至对应的模块,并根据定义在Handler
中的逻辑来进行处理。如果state需要更新,Handler
会调用Keeper
来执行更新。你将在后面的教程了解有关这些概念的更多信息。
网友评论