Cosmos-- 一.概览 -- 2.SDK程序架构

作者: 糙米薏仁汤 | 来源:发表于2019-02-26 15:00 被阅读2次

cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新

第一章概览:

  1. SDK介绍
  2. SDK程序架构
  3. 对象能力模式

SDK程序架构

状态机

区块链应用的核心是复制具有
状态机

状态机是计算机科学概念,一台机器可以具有多个状态,但在任何给定时间只有一个状态,其描述了系统的当前状态,及触发这些状态转变的事务。

给定一个状态S和交易T,状态机会返回一个新的状态S'。

+--------+                 +--------+
|        |                 |        |
|   S    +---------------->+   S'   |
|        |    apply(T)     |        |
+--------+                 +--------+

实际上,交易以区块的形式打包在一起以提高过程的效率。给定状态S和包含交易的区块B,状态机将返回新状态S'。

+--------+                              +--------+
|        |                              |        |
|   S    +----------------------------> |   S'   |
|        |   For each T in B: apply(T)  |        |
+--------+                              +--------+

在区块链上下文环境中,状态机是确定性的。这意味着如果你从一个给定的状态开始,重放相同顺序的交易,将始终以相同的最终状态结束。

Cosmos SDK为你提供了最大的灵活性用以定义应用程序的状态,交易类型和状态转变函数。使用SDK构建状态机的过程将在接下来的章节中进行更深入细致的描述。但首先,让我们看看状态机是如何使用Tendermint进行复制的。

Tendermint

作为一个开发者,你只需要使用Cosmos-SDK定义状态机,Tendermint将会为你处理网络层上的复制。

                ^  +-------------------------------+  ^
                |  |                               |  |   Built with Cosmos SDK
                |  |  State-machine = Application  |  |
                |  |                               |  v
                |  +-------------------------------+
                |  |                               |  ^
Blockchain node |  |           Consensus           |  |
                |  |                               |  |
                |  +-------------------------------+  |   Tendermint Core
                |  |                               |  |
                |  |           Networking          |  |
                |  |                               |  |
                v  +-------------------------------+  v

Tendermint是一个与应用程序无关的引擎,负责处理区块链的网络层和共识层。实际上,这意味着Tendermint负责传播和排序交易字节。Tendermint Core依赖于拜占庭容错(BFT)算法来达成交易顺序的共识。

Tendermint一致性算法同一组称为验证人的特殊节点一起运作。验证人负责向区块链添加交易区块。对于任何给定的区块,有一组验证人V。通过算法选择V中的验证人A作为下一个区块的提议人。如果超过三分之二的V签署了prevoteprecommit,并且区块包含的所有交易都是有效的,则该区块被认为是有效的。验证人集合可以通过状态机中编写的规则进行更改。要深入了解算法,点击

Cosmos SDK应用程序的主要部分是一个区块链服务程序,它由网络中的每个节点在其本地运行。如果验证人集合中三分之一以下的是拜占庭(即恶意的),则每个节点在同时查询状态时应获得相同的结果。

ABCI

Tendermint通过名为ABCI的接口将交易从网络层传递给应用程序,这是应用程序必须要实现的。

+---------------------+
|                     |
|     Application     |
|                     |
+--------+---+--------+
         ^   |
         |   | ABCI
         |   v
+--------+---+--------+
|                     |
|                     |
|     Tendermint      |
|                     |
|                     |
+---------------------+

注意,Tendermint仅处理交易字节。它不知道这些字节究竟是什么意思。Tendermint所做的只是对交易确定性地排序。赋予这些字节意义是应用程序的工作。Tendermint通过ABCI将交易字节传递给应用程序,并期望返回代码以知晓消息是否成功。

以下是ABCI中最重要的消息类型:

  • CheckTx : 当Tendermint Core收到交易时,会将其传递给应用程序以检查其有效性。一个名为“Ante Handler(预处理)”的特殊handler用于执行一系列验证步骤,例如检查手续费用是否足够和验证签名是否合法。如果交易有效,则将交易添加到mempool(交易池)中并广播到对等节点。注意,CheckTx不会处理交易(即不会对状态进行修改),因为它们尚未包含在区块中。
  • DeliverTx : 当Tendermint Core接收到有效区块时,其中的每条交易都将通过DeliverTx传递给应用程序进行处理。正是在这一阶段发生了状态转换。“Ante Handler”将再次执行,连同对交易中每条message进行实际处理的handler一起执行。
  • BeginBlock/EndBlock : 无论区块是否包含交易,这两个消息都将在每个区块的开头和结尾执行。触发自动的逻辑执行是很有用的。过程中要足够小心,因为计算成本高昂的循环运算可能会减慢区块链的速度,甚至在无限循环时区块链本身停滞。

有关ABCI方法和类型的详细介绍请点击

在Tendermint上构建的任何应用程序都需要实现ABCI接口,来同底层的本地Tendermint引擎进行通信。幸运的是,你不必实现ABCI接口。Cosmos SDK以baseapp的形式提供了样板实现。

相关文章

  • Cosmos-- 一.概览 -- 2.SDK程序架构

    cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新第一章概览:SDK...

  • Angular 4.0 架构详解

    Angular架构概览 先来看一下官方放出的架构图。 架构概览.png 这个架构图展现了 Angular 应用中的...

  • Cosmos-- 一.概览 -- 1.SDK介绍

    cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新第一章概览:SDK...

  • 架构概览

    前言 这将是一个系列的文章,整理和记录我对软件架构设计的感悟和理解,与大家一起分享经验和教训。 架构是什么 软件系...

  • 大师兄的鸿蒙学习笔记:对比HarmonyOs和Android系统

    一. 与Android系统架构比对 1. HarmonyOs架构概览 HarmonyOs的架构分为内核层、系统服务...

  • 深入理解相机二(相机架构概览)

    和你一起终身学习,这里是程序员 Android 相机架构概览 Android系统利用分层思想,将各层的接口定义与实...

  • Cosmos-- 一.概览 -- 3.对象能力模式

    cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新第一章概览:SDK...

  • 20190401每周精品之编程

    mysql执行过程 一MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是MySQL 的一个简要架构...

  • scrapy_架构概览

    架构概览 概述 接下来的图表展现了Scrapy的架构,包括组件及在系统中发生的数据流的概览(绿色箭头所示)。 下面...

  • kafka架构概览

    Broker进程根据Topic对消息进行归类。Producer是外部进程,是发送消息者。Consumer也是外部进...

网友评论

    本文标题:Cosmos-- 一.概览 -- 2.SDK程序架构

    本文链接:https://www.haomeiwen.com/subject/uxbayqtx.html