编者注:本文对 Cosmos 网络中区块链和比特币、以太坊进行了巨细靡遗的比较。做者先从区块链系统的栈层出发,分析了比特币、以太坊在不一样栈层上的技术要点,最后回归到 Cosmos 网络中的区块链,概念解释尤其清晰,是不可多得的解释文。前端
鉴于文章实在太长,咱们在文首附上了目录。算法
Cosmos 是什么?数据库
区块链结构简介编程
比特币栈层结构后端
以太坊栈层结构安全
基于比特币与以太坊构建应用程序网络
Cosmos 区块链结构架构
Cosmos 共识层app
Cosmos 网络层框架
Cosmos 应用层
结论
密码学货币产业从未停下脚步。
一切都始于2010年比特币的问世。比特币刚问世时,全部人都认为它是数字货币的圣杯。曾经被认为不可能的事情如今变成了现实:第一个点对点(peer-to-peer,P2P)支付网络出现了。
即使在今天,对事物的信任仍然是最难以琢磨而且最珍贵的资产。比特币经过建立第一个“免信任型”系统,绕过了这一问题。但这仅仅是一个开始。
从那以后,比特币就成为了催生更普遍密码学创新的催化剂,这些创新也致使了一系列新型去中心化系统与金融基础设施的出现:以太坊(Ethereum)、闪电网络(Lighting Network)、EOS、Tezos、Maker…… 这个名单还在不断延长。
可是有一个项目不同凡响:Cosmos。
在区块链领域,Cosmos 是一个“新生儿”。虽然它的理念已经出现有一段时间了,但其开发团队一直在背后慢慢地开发以确保 Cosmos 设计及实现的正确性。这也使得 Cosmos 最近才公开推出。
所以,有不少人看过 Cosmos 项目以后却不理解它也就不足为奇了。简单浏览 Cosmos 相关资料并不会让他们可以直观地了解 Cosmos,反而会让他们有更多疑问:
什么是 Cosmos?
Cosmos 的工做原理是什么?
与比特币、以太坊相比 Cosmos 有什么不一样?
Cosmos 的特色是什么?
我已经知道 Cosmos 团队快两年了。老实说,当我第一次据说他们在作什么的时候,我和其余人同样对它的概念一无所知。
但当我更深刻地了解 Cosmos 以后,我开始很是欣赏它。我这么说不只是为了引人注目,是真正地发自心里。
我对 Cosmos 很是着迷,因此咱们决定将 TruStory 应用构建为一个 Cosmos 区块链应用。(插播:我将在以后的文章中更详细地阐述咱们为何会作出这个决定)
尽管如此,关于 Cosmos 仍然有不少困惑。因此我决定专门为此写一篇文章。我想让读者对 Cosmos 是什么以及它在区块链世界中的定位有一个更深层次的理解。
你准备好开始了么?理清思绪,带上你的思考帽,系好安全带。咱们要开车啦!
Cosmos 是这样定义本身的:
“一个由多条独立平行区块链组成的去中心化网络,每条平行区块链均采用 BFT 共识算法(例如:Tendermint 共识)。”
哇,好拗口啊!让咱们把这个定义拆分红几个容易理解的部分。
我在这里假设读者已经对区块链很是了解了!不过,我仍是快速回顾一下:
简单来讲,区块链是一个分布在许多计算机上的数据库,每台计算机上的数据库都保持相同的状态。换句话说,每台计算机上的数据库所包含的数据都彻底相同。这些计算机共同组成了所谓的“区块链网络”。
比特币和以太坊都是区块链,而 Cosmos 是由许多这样并行运行的区块链组成的区块链网络。
若是你不能彻底理解刚才说的,那么在进一步了解 Cosmos 工做原理以前,你最好再多读一些关于区块链的基础知识。(编者注:中译本见文末超连接《区块链是什么鬼》)
BFT 是 “Byzantine Fault-Tolerant(拜占庭容错)”的缩写。一条拜占庭容错的区块链可以在网络中部分节点宕机 以及/或者 做恶(即所谓“拜占庭式节点”)的状况下,保证网络依旧具有“安全性”与“活性”等性质。安全性与活性可以确保区块链网络中每一个节点维护相同的状态。
插播:若是你想要更深刻地了解什么是安全性(Safety)与活性(Liveness),请阅读个人这篇有关分布式共识的文章。(编者注:中译本见文末超连接《分布式共识的工做原理,Part-2》)
所以,一种 “BFT 共识算法” 乃是定义了计算机间通讯与协调、使得区块链具备拜占庭容错能力的算法。Cosmos 网络中的全部区块链都采用某种 BFT 共识算法。
比特币和以太坊的共识算法不是典型的 BFT 算法。因此它们不符合 Cosmos 网络中区块链的定义。(值得注意的是,虽然它们不是拜占庭容错的,但仍然可让比特币和以太坊等区块链加入 Cosmos 网络,仅仅须要一些额外的步骤。若是你以为费解,不用担忧——咱们将稍后对此进行更深刻的研究。)
插播:若是你仍是不清楚什么是 BFT,我在这篇文章中写得蛮清楚了。(编者注:中译本见文末超连接《分布式共识的工做原理,Part-3》)
Tendermint 是由 Cosmos 开发者提出并构建的一种 BFT 共识算法。Cosmos 网络中的区块链可使用 Tendermint 共识或任何其余 BFT 共识算法。稍后咱们将在本文了解更多关于 Tendermint 的内容。
简单来讲,Cosmos 网络是一个由多条并行运行的独立拜占庭容错区块链组成的生态系统。这些区块链是 独立运行的,而且可以与其余区块链进行 互操做。
如今你可能会想,“为何区块链之间要进行互操做呢?”
好问题!咱们很快就会讲到。但首先咱们要回顾一下区块链的结构。
在深刻研究 Cosmos 生态系统中区块链是如何工做和互操做的以前,让咱们先回顾一下区块链结构的基础知识。
正如咱们前面所讨论的,区块链是一个多机复制数据库,而且在每台计算机上维护相同的数据。这种类型的分布式系统也被称为“复制状态机”。
复制状态机是一种多机复制的肯定性状态机,但由于网络中每台计算机都维护着相同的状态,所以在功能上看起来就像一台单机。
听起来很熟悉,对吧?回顾上文区块链的定义,这里的定义仅仅是将“数据库”替换为“状态机”、“数据”替换为“状态”,相信你能明白个人意思。
“肯定性” 能够简单地理解为,给定一个肯定的输入,状态机将始终产生相同的输出。在区块链系统中,“肯定性”意味着若是你从一个给定状态开始执行相同的事务序列,你老是会获得相同的最终状态。
复制状态机从某个状态启动。每笔有效事务都将致使系统状态转变到下一个状态(这与数据库中条目更新相同:若是你更新某个条目,数据库将迁移到包含该更新后数据条目的新状态)。
复制状态机在概念上有三个栈层:
1)应用层
应用层负责定义状态变迁,并在事务发生后更新状态机状态。
2)网络层
网络层负责将在某一个状态机上执行的事务传播到网络中其余全部状态机上。
3)共识层
共识层由算法组成,负责确保在事务执行后每一台状态机都存储相同的状态(即,某一状态机没法伪造不存在的事务)。
3a)抗女巫攻击层
试图在去中心化公网运行的复制状态机还须要第四层(“抗女巫攻击层”),确保任何一台状态机都不能破坏网络。若是没有这一层,状态机能够经过建立许多假身份来篡改状态,从而得到与其投入不成比例的影响或收益(即,发起女巫攻击)。
总之,应用层负责定义状态与管理状态迁移。网络与共识层负责保持每台机器上状态一致(即,确保网络中每一个数据库数据一致)。抗女巫攻击层(显然)负责避免女巫攻击。
如今,让咱们看看在比特币区块链和以太坊区块链中是如何定义与实现这些栈层的。
1)应用层
比特币的主要应用是 P2P 交易。比特币使用 Script(一种堆栈式非图灵完备的语言)来定义与执行交易。当发送方经过交易发送比特币时,发送方将使用脚原本编码指定谁才能掌控这笔资金。Script 包含一组操做码或者说命令,发送方可使用这些操做码来指定要花费一笔比特币所需知足的条件。
2)网络层
当发送方向接收方发送比特币时,该转帐交易必须被广播到网络中,才能使矿工将其打包进区块中。比特币使用一种“Gossip 协议”来确保每一个节点都会将其接收的全部新区块或交易发送至邻居节点(peer)。Gossip 协议是确保消息在所有节点间传播的 P2P 协议。比特币网络中全部节点都会将其新接收的有效交易当即发送给其邻居节点,从而使得待打包交易可以在几秒钟内经过点对点网络传播到大多数节点。
3)共识层
在交易被转播到网络中后,还须要将其添加到区块链中才能完成转帐(即让网络中的计算机都来执行这个事务)。验证交易并将其打包到区块中的过程称为“中本聪共识(Nakamoto Consensus)”。中本聪共识的运行原理能够在其余论坛或文章找到。若是你想深刻了解,这篇文章是一个很好的入门文章。
3a)抗女巫攻击层
中本聪共识依赖于“工做量证实(Proof-of-Work)”来防止女巫攻击。基本上,产生一个新区块所需的算力使得比特币共识协议自身可以抵抗女巫攻击。因为矿工须要大量的算力来产生下一个区块,使得他们没法在不增长大量算力(与资金)投入的状况下“伪造”多个身份。
1)应用层
与比特币不一样,以太坊的设计初衷是构建一个可以运行去中心化应用的平台。以太坊包含一种高级语言(即,Solidity),使得开发者可以经过编写智能合约定义去中心化应用的具体功能。EVM(以太坊虚拟机,Ethereum Virtual Machine)是以太坊应用层的核心。EVM 使用 EVM 编译器将智能合约代码编译成字节码,用户能够经过交易的形式,将该字节码上传到区块链以后,EVM 就能够执行这些字节码,从而改变去中心化应用的状态(即,更新以太坊节点存储的该智能合约相关状态)。因为以太坊网络中全部节点均运行 EVM,这也保证全部节点的状态一致。
2)网络层
与比特币类似,以太坊也使用 Gossip 协议,使得节点可以与其邻居节点通讯。
3)共识层
为了达成共识,以太坊使用了与中本聪共识类似的“Ethash”,但 Ethash 与中本聪共识有一些关键区别。若是你须要了解以太坊共识算法的工做原理,请阅读我以前的一篇文章。(编者注:中译本见文末超连接《以太坊的工做原理》)
3a)抗女巫攻击层
与比特币同样,Ethash 依赖于工做量证实(目前为止,译者注:将来以太坊 2.0 将切换到 PoS 共识机制)来抵御女巫攻击。
我但愿以上内容让你对区块链结构有了必定了解。当咱们讨论 “比特币” 或 “以太坊”时,这些名字指的是相关的全部栈层。由于比特币和以太坊是由这些栈层组成的总体。
你没法将以太坊智能合约与其底层 Ethhash 共识层分开,也所以单独讨论这两个主题都没有意义。比特币也是如此,不使用中本聪共识与工做量证实你就没法进行比特币交易。
另外一方面,Cosmos 采用了一种稍微不一样的模式:它将应用层与共识层和网络层分开。
由于 Cosmos 的目标是创建一个区块链网络,因此这样设计是有意义的。在这个区块链网络中,每条区块链是独立的,而且有它本身的须要和要求(即,它本身的应用)。在这种状况下,想要提出一种一刀切的、适合全部区块链的应用层,是行不通的。让咱们用几个例子来研究一下缘由。
假设咱们准备构建一个货币应用程序。在这种状况下,像 Bitcoin Scrypt 这种简单的基于堆栈的脚本语言是最佳选择。比特币脚本语言不只能够很好地实现从一个地址到另外一个地址的价值转移,而且很是简单、不是图灵完备的。
所以,它不太容易受到各类类型安全漏洞的影响,而这些安全漏洞可能会严重影响图灵完备的编程语言。这正是咱们在处理货币与价值存储时想要的。可是这种简单也有其局限性。
使用 Scrypt 作任何更复杂的事情(例如:去中心化预测市场)都很是困难。比特币脚本语言不只受其可执行代码复杂性限制,对于开发者来讲也十分不友好。更糟糕的是,比特币区块链交易的处理速度很慢(大约每秒 7 笔交易)。所以,直接在比特币区块链上构建须要高交易吞吐量的应用是不现实的。
与比特币相反,以太坊的 EVM 与智能合约语言(Solidity)是为了支持更灵活的应用程序而设计的。Solidity 是一种图灵完备的编程语言,所以理论上它能够执行任意算法复杂度的代码。
在实际应用中,因为 Solidity 易出错并易受到安全攻击,因此使用 Solidity 开发任意复杂度的程序是至关困难的。这种特性与处理价值转移的应用程序背道而驰,在后者这个场景种,安全性是最重要的。
此外,智能合约也很是难以升级,从而使得迭代开发很是困难。合约一旦部署上链,你所能作的就只有祈祷它可以平稳运行!与比特币同样,以太坊交易处理速率也很是低(大约每秒可以处理 15 笔交易),所以在以太坊区块链上构建须要高交易吞吐量的应用也是不现实的。
Cosmos 的提出就是为了知足这种实际业务须要,尽管它为此作了一些较大的牺牲。接下来咱们将深刻研究具体的细节。但在那以前,咱们还必须理解 Cosmos 中区块链的三个栈层是什么样的。
首先,咱们将从共识层开始了解 Cosmos,以便更好地理解在 Cosmos 上开发应用程序与使用比特币或以太坊有何不一样。
Cosmos 网络中区块链使用 Tendermint 共识算法。Tendermint 是一个 2014 年诞生的开源项目,“旨在解决比特币工做量证实(Proof-of-Work, PoW)共识算法的速度、可扩展性与环境问题”。
Tendermint 共识算法是一个 “无视应用层(application-agnostic)的共识引擎”。从本质上讲,这意味着任何区块链均可以使用 Tendermint 共识算法,它是拜占庭容错的,而且使用 PoS 算法来抵御女巫攻击。
又是一大堆术语!咱们好好说道说道。
回顾一下,共识算法的存在是为了保证事务执行后,状态机中保存的状态一致;而 Tendermint 共识算法定义了一种“能让全部节点对下个区块达成共识”的规则。
让咱们看看相关因素及规则是如何运做的吧!
验证者
负责达成状态一致的节点称为“验证者”。任何愿意协助整个网络达成共识的参与节点都能成为验证者;做为回报,验证者会得到交易手续费和区块奖励。Tendermint 整合这些验证者的投票结果,肯定下一个区块的正确状态。
经过质押对抗女巫攻击
每一个验证者的票都有本身的投票权重,投票权重一般是在创世块产生时肯定,或是在开始运行后根据应用层开发者所设计的某些逻辑来决定。通常来讲,由验证者锁在系统中的代币量(做为质押品)决定投票权重的大小,这种质押物也被称为“保证金”。
Consensus 共识
按照规则,验证者要按轮次(round)对每个区块达成共识。每一轮都包含三个基本步骤:提议阶段(Propose)、预投票阶段(Prevote)、预提交阶段(Precommit),以及两个后续步骤:提交阶段(Commit)、新高度阶段(NewHeight)。从抽象角度来看,验证者按照如下协议规则共同决定下一高度要使用什么区块:
首先是提议阶段,由指定的验证者提出一个区块——每一轮中的提议者都是从有序的列表中按照投票权重的比例,肯定性地选择出来的。
接着进入预投票阶段——每一位验证者广播他们各自的预投票。
当该轮次中某一区块收到超过 2/3 的预投票,咱们就称其为 “polka”。一旦出现 “polka”,就进入下一个阶段。
进入预提交阶段,由每个验证者广播他们的预提交的投票。
若是某一特定区块收到超过 2/3 的预投票,就进入提交阶段,这个阶段会将区块加入区块链,并增长区块高度。每当有新的区块加入区块链,所在区块链的区块高度就 +1。
若是失败,则要么返回预投票阶段,要么回到预提交阶段。
要注意的是,在任何高度上,都有可能须要一轮以上的投票才能提交一个区块。由于可能出现如下状况:
被指定的“提议者”在应该提出区块时掉线
提议者所提出的区块违反一些预先定义的规则
Tendermint 依靠超时机制确保区块链出块不会遇到延宕。若是在超时前,提议区块没有收到超过 2/3 的预投票,则由新的提议者再次进行提出区块流程。
协议细节详见此处。
总的来讲,Tendermint 选择了与比特币的中本聪共识、以太坊 Ethash 不一样的路线, 让咱们作一些重点对比:
肯定性与几率性
与中本聪共识和 Ethash 这类几率性共识不一样, Tendermint 是肯定共识——这意味着 Tendermint 每一个区块都是最终肯定的,而不像比特币的区块只是处于“极可能”被肯定的状态。
咱们回顾一下中本聪共识,区块老是处于“未肯定”状态——只有肯定某个区块在“最长链”上,才能有把握认为该块正在被最终肯定,这也是为何比特币交易须要等“6 个区块确认”。
而在 Tendermint 中,验证者成功投票及提交后,区块就当即被确认了。
固定验证者 vs. 可变验证者
中本聪共识及 Ethash 容许矿工随时选择加入或退出,并不须要其余矿工提早知晓。相反地,Tendermint 共识要求维护一个事先知晓且固定的验证者集合,验证者身份是靠他们的公钥来辨认的。
领导 vs. 无领导
中本聪共识及 Ethash 没有指定领导者来提议下一个区块(i.e. 任何矿工都有可能挖到下一个区块)。另外一方面,Tendermint 选择领导者,或称为提议者,负责提出下一个区块。
明确的 vs. 模糊的超时机制
中本聪共识和 Ethash 没有使用超时机制来确保矿工必定能出块,而 Tendermint 有明确的超时机制保证区块链的出块过程不会遭遇延宕。
100 个验证者 vs. 1000 个验证者
Tendermint 遵循传统的一致性共识算法,每一个验证者之间都要进行通讯。考虑到通讯开销,Tendermint 没法像比特币或以太坊那样能够无限增长验证者。Tendermint 共识安排了 100 个验证者。
所以 Tendermint 的缺点之一就是,它要求事先知晓全部验证者,并且不容许验证者随时加入或退出;这与比特币或以太坊不一样。
除此以外,Tendermint 还要求整个系统维持统一时钟;虽然在实践中 Tendermint 已经证实经过整合每一个节点的时间戳就能维护统一时钟,但你们都知道同步时间是个很是复杂的理论问题。
Tendermint 的验证者少于比特币,并且要求事先知道验证者集合,所以可能会有人提出 Tendermint 共识协议“不够去中心化”的质疑。
可是,去中心化是见仁见智的。Okay,先不抖机灵,我想说的是去中心化是为了达到某种目标的手段,而不是目标自己;我不喜欢在了解去中心化的目标前就妄下评论。
我认为在许多案例(甚至是大部分状况)下,只要破坏系统的代价够大,而且有针对攻击者的防护及惩罚机制,则 Tendermint 要求固定且事先知晓验证者集合的保守方法是可行的。
若是咱们回顾预测市场的例子,我会说去中心化预测市场应用,根本不须要像健全货币或是价值存储应用同样具有这么高级别的去中心化程度,有 10 、20 或 100 个验证者足矣。
以 TruStory 为例,咱们使用 Cosmos SDK 构建后端应用逻辑,将应用的状态和逻辑存在区块链上,而前端某种程度上是私有的——Cosmos SDK 容许咱们创建用来赏善罚恶的激励系统、透明化展现数据层、容许用户分享网络的全部权及治理权,还能够共同决议将来的事务、踢出恶意使用者,并按照我的喜爱针对用户层或基础层设计网络。对于开发者来讲,他们也能基于后端区块链逻辑构建本身的开发工具及服务。所以有 10 个或 100 个执行并验证交易的验证者,就可以保障使用者和开发者对于透明性、全部权、责任归属的需求。
若是你能明白 Tendermint 以“选择固定且事先知晓的验证者集合”做为牺牲,所带来的利益,你会对这些本来不可能实现的神奇特性充满赞叹:
安全性及活跃度
Tendermint 的协议保证安全性及活跃度。假设超过 2/3 的验证者投票权重没有掌握在拜占庭验证者手中(也就超过 2/3 验证者是遵照协议的),换句话说少于 1/3的投票是恶意的 ,则协议就能保证网络的安全性及活跃度(i.e. 验证者永远不会在相同的块高度提出冲突区块,区块链永远会正常出块)。
高性能
Tendermint 共识的出块时间能够低至 1 秒,达到每秒处理数千笔交易的速度,让 Tendermint 更适合须要频繁交易的应用。
即时确认
在区块链世界中,最终肯定性(Finality)意味着一旦区块被提交上链,咱们就能肯定直至该区块以前的整个区块链的状态。
如咱们前面提到的,中本聪共识有其几率性,因此没有办法保证最终肯定性。你只能基于大多数矿工可能还在该分叉中挖矿的几率,保证你的交易所在的分叉链是共识链。
可是,Tendermint 要求验证者对每一个区块进行投票及最终确认。因此咱们能够说,在少于 1/3 恶意验证者的状况下,交易可以被“即时确认”——当区块被建立出来,使用者就知道他们的交易已经被确认了。
责任制
Tendermint 使用 PoS 做为抗女巫攻击机制——要求验证者质押代币(i.e. 他们的“保证金”),以确保节点不会经过建立多个虚假帐户来欺骗系统。
PoS 比 PoW(PoW 的证实来自矿工解出下个区块哈希所耗费的算力)更节能,可是它固有的“无利害关系”缺陷致使验证者能轻易做弊。
Tendermint 经过罚没保证金来处罚违反协议规则(e.g. 替冲突区块投票,及广播未验明的投票)的验证者,避免发生无利害关系问题。说得更具体点,协议存在“锁定规则”,规范了每一个验证者在投票给特定区块时能作的行为。举例来讲,一旦验证者预提交投票后,它就被“锁定”在该区块;只有在下一轮中要让一个不一样的区块成为 polka 时,该验证者才能解锁并预提交另外一个区块。若是违反锁定规则,验证者会被罚没保证金。
更简单的轻客户端
轻客户端比全节点“更轻巧”,由于它们不存储区块链的全部状态,只存储区块头。除非是负责验证和出块的挖矿节点,或验证者节点,否则大部分节点其实不须要存储区块链全状态。
轻客户端下载从创世区块开始到当前区块的区块头,而不去下载和存储整条链。相比于全节点,轻客户端只须要存储少许数据,由于区块头就足以验证某些特定交易的有效性。
最酷的事情在于,基于 Tendermint 的区块链的轻客户端甚至无需同步全部区块头,只要周期性的下载区块头就行。
就像咱们前面讨论的,Tendermint 与比特币、以太坊不一样,其全部区块都要通过投票及最终确认;由于每一个区块都通过最终确认,因此轻客户端只要注意验证者集合的变化——只要知道最新的验证者集合,轻客户端就能下载最新的区块头,并验证这些区块都有大于 2/3 的验证者投票。
如咱们上面所说的,Tendermint 的共识依靠验证者在每一轮进行投票来完成。所以,节点间必须能沟通及传递讯息,确保网络中全部参与者都能看到相同数据。
与比特币和以太坊同样,Tendermint 使用 gossip 协议快速传播最新的区块链状态。
网路中的节点不必定要成为验证者才能在网络共识过程当中发挥做用。举例来讲,节点能够是轻节点或是全节点,而不是验证者;这类节点也被称为 “非验证者节点”。
验证者及非验证者节点都要肩负传递数据的责任(例如提案数据、区块数据和投票数据),以确保全部节点都能收到系统正在产生的信息和交易。
目前,咱们已经了解 Tendermint 网络层及共识层的核心组成部分;网络层负责网络中全部计算机之间交易的传递,Tendermint 共识算法确保状态机的一致性(即全部节点中的区块链都是一致的)。
但咱们传递和验证的究竟是什么交易?这里就引出了应用层。
Cosmos 应用层负责:
定义和提交须要被记录进区块链的交易
在交易经过共识层提交后,持续更新区块链状态
使用 Cosmos SDK 构建应用程序
Cosmos SDK 提供一套构建应用层的框架,就像是区块链界的 Ruby-on-Rails (Ruby-on-Rails 是一种让开发者轻松经过默认设置构建网页端应用的框架),Cosmos SDK 也为开发者提供了一种基于 Tendermint 内核构建安全的区块链应用的框架。
要记住,区块链就是一个在全部节点将状态作相同备份的状态机,而 Cosmos SDK 让你能够构建能在多个节点间进行复制的实际状态机。SDK 让你自定义应用的状态、事务类型,及状态-转变函数所需的功能和工具。
Cosmos 应用如何运行(抽象视角)
Cosmos SDK 提供一种“multistore”机制来定义及维护应用层状态机的状态。Multistore 将应用层的状态划分到不一样组件,经过各自的“模块”进行管理。
Cosmos SDK 的强大之处就是它独特的模块化设计,每一个模块定义及维护一个状态子集,这些状态子集构成完整的区块链。举例来讲:
银行模块:容许你在应用中持有代币,及进行代币转帐
权限模块:容许你建立及管理帐户和签名
质押与罚没模块:容许你经过编码构建 PoS 共识机制
每一个模块都是个小状态机,能够相互聚合生成整体状态机。
应用开发者按照每一个模块和修改状态的惯用逻辑来定义子集,除了 Cosmos SDK 提供的模块,开发者还能调用第三方模块。
这种用于构建区块链应用的插件模块很是强大,由于它赋予开发者使用 SDK 或外部模块的灵活性。
应用层如何与共识层交互?
发生在应用层的交易经过区块链应用交互界面(ABCI, Application Blockchain Interface)与 Tendermint 共识及网络层通讯。
ABCI 是 Socket 通讯协议,链接 Tendermint 核心(共识 + 网络)与应用。它能够兼容任何编程语言,也就是说使用 Cosmos SDK 构建的区块链应用理论上能以任何语言编写,而不只仅是 Tendermint 底层共识和网路层所用的编程语言。
注意:当前版本的 Cosmos 主要支持 Golang,后续会加入更多语言。
总而言之,Cosmos SDK 容许开发者基于 Tendermint 内核构建去中心化应用,这个应用理论上能用任何语言开发,并经过 ABCI 链接 Tendermint 共识引擎。
将应用层(Cosnos SDK、ABCI)与网路层、共识层(Tendermint 内核)剥离,能让开发者在开发各类类型应用的时候有更大的灵活性,再加上 Cosmos SDK 容许这些应用以任何语言开发(e.g. Golang),让区块链 App 开发过程更像日常的应用开发的样子。
这与在以太坊上开发应用造成鲜明对比,由于后者要求开发者学习新语言 Solidity ,还要克服 Solidity 的诸多限制和缺陷,并且 Golang 比 Solidity 具有更多的开发工具,开发体验好上 10 倍。
除此以外,所有的以太坊 App 都基于单一网络进行操做,这么作的优点是这些 App 可以共享以太坊的标准,以及相应而生的规模效应;缺点是全部这些 App 都共享以太坊共识层,会受到新加入的应用体量大小的影响。 此外,整个网络必须做为一个巨大的单元来管理,会被治理理念和意识形态分歧所束缚,使得扩展难以进行。
Cosmos 区块链应用不会受到这些限制,每一个应用都有独立的网络、本身的共识层及治理层。
开发者有很大的自主性来决定它们的共识层权限,还能选择基于代币质押数量推举公开的验证者集合,或是经过预受权设置私密验证者集合。这种自由选择验证者集合的规则,意味着区块链对于本身的链有更大的自主性。
固然,这样的好处伴随某些牺牲:Cosmos 网路中的每一个区块链应用都必须导入本身的验证者、社群,及经济体系;没法像以太坊通常,直接蹭用全部验证者、强大的社群,及已有的经济体系。
在这第一篇文章里,咱们对比了 Cosmos 网络中的区块链架构与比特币、以太坊的不一样。这种架构赋予区块链应用对于本身的链更大的自主性。
在第二部分,咱们要深刻讨论 Cosmos 中相互独立的区块链如何进行交互;更重要的是回答“为何区块链须要互相进行交互”。