编者注:本文对Cosmos网络中区块链和比特币、以太坊进行了巨细靡遗的比较。作者先从区块链系统的栈层出发,分析了比特币、以太坊在不同栈层上的技术要点,最后回归到Cosmos网络中的区块链,概念解释尤为清晰,是不可多得的解释文。
鉴于文章实在太长,我们在文首附上了目录。
目录
Cosmos是什么?
区块链结构简介
比特币栈层结构
以太坊栈层结构
基于比特币与以太坊构建应用程序
Cosmos区块链结构
Cosmos共识层
Cosmos网络层
Cosmos应用层
结论
密码学货币产业从未停下脚步。
一切都始于2010年比特币的问世。比特币刚问世时,所有人都认为它是数字货币的圣杯。曾经被认为不可能的事情现在变成了现实:第一个点对点支付网络出现了。
即便在今天,对事物的信任仍然是最难以琢磨并且最珍贵的资产。比特币通过创建第一个“免信任型”系统,绕过了这一问题。但这仅仅是一个开始。
从那之后,比特币就成为了催生更广泛密码学创新的催化剂,这些创新也导致了一系列新型去中心化系统与金融基础设施的出现:以太坊、闪电网络、EOS、Tezos、Maker……这个名单还在不断延长。
但是有一个项目与众不同:Cosmos。
在区块链领域,Cosmos是一个“新生儿”。虽然它的理念已经出现有一段时间了,但其开发团队一直在背后慢慢地开发以确保Cosmos设计及实现的正确性。这也使得Cosmos最近才公开推出。
因此,有很多人看过Cosmos项目之后却不理解它也就不足为奇了。简单浏览Cosmos相关资料并不会让他们能够直观地了解Cosmos,反而会让他们有更多疑问:
什么是Cosmos?
Cosmos的工作原理是什么?
与比特币、以太坊相比Cosmos有什么不同?
Cosmos的特点是什么?
我已经知道Cosmos团队快两年了。老实说,当我第一次听说他们在做什么的时候,我和其他人一样对它的概念一无所知。
但当我更深入地了解Cosmos之后,我开始非常欣赏它。我这么说不仅是为了引人注目,是真正地发自内心。
我对Cosmos非常着迷,所以我们决定将TruStory应用构建为一个Cosmos区块链应用。
尽管如此,关于Cosmos仍然有很多困惑。所以我决定专门为此写一篇文章。我想让读者对Cosmos是什么以及它在区块链世界中的定位有一个更深层次的理解。
你准备好开始了么?理清思绪,带上你的思考帽,系好安全带。我们要开车啦!
Cosmos是什么?
Cosmos是这样定义自己的:
“一个由多条独立平行区块链组成的去中心化网络,每条平行区块链均采用BFT共识算法。”
哇,好拗口啊!让我们把这个定义拆分成几个容易理解的部分。
“独立平行区块链的去中心化网络”
我在这里假设读者已经对区块链非常了解了!不过,我还是快速回顾一下:
简单来说,区块链是一个分布在许多计算机上的数据库,每台计算机上的数据库都保持相同的状态。换句话说,每台计算机上的数据库所包含的数据都完全相同。这些计算机共同组成了所谓的“区块链网络”。
火币推出《一分钟读懂DeFi》系列科普视频:据官方消息,8月24日,火币推出《一分钟读懂DeFi》系列科普视频,并与微博财经合作冠名播出,布道DeFi认知,助力行业发展《一分钟读懂DeFi》是由火币成长学院打造的业内首个系统全面讲解DeFi的系列科普动画,继推出《区块链100问》后的再续佳作。《一分钟读懂DeFi》系列动画对DeFi的发展进行系统梳理,适合想要由浅入深、全面系统了解区块链DeFi的人们轻松了解DeFi。目前视频已由火币网官方微博发布。[2020/8/24]
比特币和以太坊都是区块链,而Cosmos是由许多这样并行运行的区块链组成的区块链网络。
如果你不能完全理解刚才说的,那么在进一步了解Cosmos工作原理之前,你最好再多读一些关于区块链的基础知识。
“每条区块链都采用BFT共识算法”
BFT是“ByzantineFault-Tolerant”的缩写。一条拜占庭容错的区块链能够在网络中部分节点宕机以及/或者作恶的情况下,保证网络依旧具备“安全性”与“活性”等性质。安全性与活性能够确保区块链网络中每个节点维护相同的状态。
插播:如果你想要更深入地了解什么是安全性与活性,请阅读我的这篇有关分布式共识的文章。
因此,一种“BFT共识算法”乃是定义了计算机间通信与协调、使得区块链具有拜占庭容错能力的算法。Cosmos网络中的所有区块链都采用某种BFT共识算法。
比特币和以太坊的共识算法不是典型的BFT算法。所以它们不符合Cosmos网络中区块链的定义。
插播:如果你还是不清楚什么是BFT,我在这篇文章中写得蛮清楚了。
“Tendermint共识算法”
Tendermint是由Cosmos开发者提出并构建的一种BFT共识算法。Cosmos网络中的区块链可以使用Tendermint共识或任何其他BFT共识算法。稍后我们将在本文了解更多关于Tendermint的内容。
简单来说,Cosmos网络是一个由多条并行运行的独立拜占庭容错区块链组成的生态系统。这些区块链是独立运行的,并且能够与其他区块链进行互操作。
现在你可能会想,“为什么区块链之间要进行互操作呢?”
好问题!我们很快就会讲到。但首先我们要回顾一下区块链的结构。
区块链结构简介
在深入研究Cosmos生态系统中区块链是如何工作和互操作的之前,让我们先回顾一下区块链结构的基础知识。
正如我们前面所讨论的,区块链是一个多机复制数据库,并且在每台计算机上维护相同的数据。这种类型的分布式系统也被称为“复制状态机”。
复制状态机是一种多机复制的确定性状态机,但因为网络中每台计算机都维护着相同的状态,因此在功能上看起来就像一台单机。
听起来很熟悉,对吧?回顾上文区块链的定义,这里的定义仅仅是将“数据库”替换为“状态机”、“数据”替换为“状态”,相信你能明白我的意思。
“确定性”可以简单地理解为,给定一个确定的输入,状态机将始终产生相同的输出。在区块链系统中,“确定性”意味着如果你从一个给定状态开始执行相同的事务序列,你总是会得到相同的最终状态。
复制状态机从某个状态启动。每笔有效事务都将导致系统状态转变到下一个状态。
复制状态机在概念上有三个栈层:
1)应用层
IMF今日发布的加密货币科普视频实为两年前旧闻,且存在诸多疏漏:国际货币基金组织IMF今日在推特上发布了一条关于加密货币的科普视频,这段时长两分钟的视频最初发布于2018年6月。该视频称加密货币是“货币进化的下一步”,但没有特别提到DLT、区块链,甚至是代币名称等术语。BTC、XRP和ETH只出现在说明加密交易的图形中。尽管这段视频到目前为止已经获得了超过13.7万的点击量和2900个赞,但来自加密社区的许多反应都是批评的,他们指出了信息中的漏洞和似乎具有误导性的措辞。
Reddit用户nanooverbtc称:“他们犯了很多错误,比如把私钥称为密码。”该视频也没有讨论挖矿或加密货币供应。Kraken策略师Pierre Rochard等知名人士表示:“可证明的稀缺性是比特币有趣的原因,你忘了提这一点。”(Cointelegraph)[2020/8/24]
应用层负责定义状态变迁,并在事务发生后更新状态机状态。
2)网络层
网络层负责将在某一个状态机上执行的事务传播到网络中其他所有状态机上。
3)共识层
共识层由算法组成,负责确保在事务执行后每一台状态机都存储相同的状态。
3a)抗女巫攻击层
试图在去中心化公网运行的复制状态机还需要第四层,确保任何一台状态机都不能破坏网络。如果没有这一层,状态机可以通过创建许多假身份来篡改状态,从而获得与其投入不成比例的影响或收益。
总之,应用层负责定义状态与管理状态迁移。网络与共识层负责保持每台机器上状态一致。抗女巫攻击层负责避免女巫攻击。
现在,让我们看看在比特币区块链和以太坊区块链中是如何定义与实现这些栈层的。
比特币栈层结构
1)应用层
比特币的主要应用是P2P交易。比特币使用Script来定义与执行交易。当发送方通过交易发送比特币时,发送方将使用脚本来编码指定谁才能掌控这笔资金。Script包含一组操作码或者说命令,发送方可以使用这些操作码来指定要花费一笔比特币所需满足的条件。
2)网络层
当发送方向接收方发送比特币时,该转账交易必须被广播到网络中,才能使矿工将其打包进区块中。比特币使用一种“Gossip协议”来确保每个节点都会将其接收的所有新区块或交易发送至邻居节点。Gossip协议是确保消息在全部节点间传播的P2P协议。比特币网络中所有节点都会将其新接收的有效交易立即发送给其邻居节点,从而使得待打包交易能够在几秒钟内通过点对点网络传播到大多数节点。
3)共识层
在交易被转播到网络中后,还需要将其添加到区块链中才能完成转账。验证交易并将其打包到区块中的过程称为“中本聪共识”。中本聪共识的运行原理可以在其他论坛或文章找到。如果你想深入了解,这篇文章是一个很好的入门文章。
3a)抗女巫攻击层
中本聪共识依赖于“工作量证明”来防止女巫攻击。基本上,产生一个新区块所需的算力使得比特币共识协议自身能够抵抗女巫攻击。由于矿工需要大量的算力来产生下一个区块,使得他们无法在不增加大量算力投入的情况下“伪造”多个身份。
以太坊栈层结构
1)应用层
与比特币不同,以太坊的设计初衷是构建一个能够运行去中心化应用的平台。以太坊包含一种高级语言,使得开发者能够通过编写智能合约定义去中心化应用的具体功能。EVM是以太坊应用层的核心。EVM使用EVM编译器将智能合约代码编译成字节码,用户可以通过交易的形式,将该字节码上传到区块链之后,EVM就可以执行这些字节码,从而改变去中心化应用的状态。由于以太坊网络中所有节点均运行EVM,这也保证所有节点的状态一致。
动态 | 报告:区块链等热点词促使童书科普百科类成交额同比增速最高:近日,京东图书与艾瑞咨询联合发布了《2019中国图书市场报告》。报告指出,AI、5G、区块链、机器人、VR、智能家居、AR这些热点词,不断点燃科技热潮,科技在改变大众生活的同时,也吸引了越来越多家长的关注,从小培养孩子对科技的兴趣和热爱。因此童书中科普百科类成交额同比增速最高,占比将近40%。[2020/1/8]
2)网络层
与比特币相似,以太坊也使用Gossip协议,使得节点能够与其邻居节点通信。
3)共识层
为了达成共识,以太坊使用了与中本聪共识相似的“Ethash”,但Ethash与中本聪共识有一些关键区别。如果你需要了解以太坊共识算法的工作原理,请阅读我之前的一篇文章。(编者注:中译本见文末超链接《以太坊的工作原理》)
3a)抗女巫攻击层
与比特币一样,Ethash依赖于工作量证明来抵御女巫攻击。
基于比特币与以太坊构建应用程序
我希望以上内容让你对区块链结构有了一定了解。当我们讨论“比特币”或“以太坊”时,这些名字指的是相关的所有栈层。因为比特币和以太坊是由这些栈层组成的整体。
你无法将以太坊智能合约与其底层Ethhash共识层分开,也因此单独讨论这两个主题都没有意义。比特币也是如此,不使用中本聪共识与工作量证明你就无法进行比特币交易。
另一方面,Cosmos采用了一种稍微不同的模式:它将应用层与共识层和网络层分开。
因为Cosmos的目标是建立一个区块链网络,所以这样设计是有意义的。在这个区块链网络中,每条区块链是独立的,并且有它自己的需要和要求。在这种情况下,想要提出一种一刀切的、适合所有区块链的应用层,是行不通的。让我们用几个例子来研究一下原因。
比特币局限性的一个例子
假设我们准备构建一个货币应用程序。在这种情况下,像BitcoinScrypt这种简单的基于堆栈的脚本语言是最佳选择。比特币脚本语言不仅可以很好地实现从一个地址到另一个地址的价值转移,并且非常简单、不是图灵完备的。
因此,它不太容易受到各种类型安全漏洞的影响,而这些安全漏洞可能会严重影响图灵完备的编程语言。这正是我们在处理货币与价值存储时想要的。但是这种简单也有其局限性。
使用Scrypt做任何更复杂的事情都非常困难。比特币脚本语言不仅受其可执行代码复杂性限制,对于开发者来说也十分不友好。更糟糕的是,比特币区块链交易的处理速度很慢。因此,直接在比特币区块链上构建需要高交易吞吐量的应用是不现实的。
以太坊局限性的一个例子
与比特币相反,以太坊的EVM与智能合约语言是为了支持更灵活的应用程序而设计的。Solidity是一种图灵完备的编程语言,因此理论上它可以执行任意算法复杂度的代码。
在实际应用中,由于Solidity易出错并易受到安全攻击,所以使用Solidity开发任意复杂度的程序是相当困难的。这种特性与处理价值转移的应用程序背道而驰,在后者这个场景种,安全性是最重要的。
此外,智能合约也非常难以升级,从而使得迭代开发非常困难。合约一旦部署上链,你所能做的就只有祈祷它能够平稳运行!与比特币一样,以太坊交易处理速率也非常低,因此在以太坊区块链上构建需要高交易吞吐量的应用也是不现实的。
Cosmos的提出就是为了满足这种实际业务需要,尽管它为此做了一些较大的牺牲。接下来我们将深入研究具体的细节。但在那之前,我们还必须理解Cosmos中区块链的三个栈层是什么样的。
现场 | 火币中国推出数字经济及区块链产业科普新书:金色财经现场报道,12月6日,由海南省工业和信息化厅主办,南南合作金融中心协办,海南生态软件园、火币中国承办的“海南自贸港数字经济和区块链国际合作论坛”在海口举行,这是全球首次区块链部长级论坛。
在本次论坛上,火币中国举行了“数字经济及区块链产业科普系列新书发布”仪式,希望通过教材、专业教育、培训等多种方式,帮助从业者、高校、研究机构深入了解区块链,从而建立起区块链全局性知识模型,真正推动区块链应用落地。火币中国CEO袁煜明介绍,将联合机械工业出版社面向普通高等教育推出《区块链导论》、《区块链系统设计与应用》和《区块链新商业模式分析》系列教材,这是国内最早推动的区块链教材之一;火币中国还积极参与数字经济的研究,由中信出版社出版的新书《读懂Libra》已经上市;由火币中国负责编写的区块链技术科普读物《区块链技术进阶指南》将于12月面世;首本行业内最全的区块链应用案例集《区块链产业应用100例》在本次论坛进行了首次刊印。[2019/12/6]
Cosmos区块链结构
首先,我们将从共识层开始了解Cosmos,以便更好地理解在Cosmos上开发应用程序与使用比特币或以太坊有何不同。
Cosmos共识层
Cosmos网络中区块链使用Tendermint共识算法。Tendermint是一个2014年诞生的开源项目,“旨在解决比特币工作量证明共识算法的速度、可扩展性与环境问题”。
Tendermint共识算法是一个“无视应用层的共识引擎”。从本质上讲,这意味着任何区块链都可以使用Tendermint共识算法,它是拜占庭容错的,并且使用PoS算法来抵御女巫攻击。
又是一大堆术语!我们好好说道说道。
Tendermint共识是如何运作的?
回顾一下,共识算法的存在是为了保证事务执行后,状态机中保存的状态一致;而Tendermint共识算法定义了一种“能让所有节点对下个区块达成共识”的规则。
让我们看看相关因素及规则是如何运作的吧!
验证者
负责达成状态一致的节点称为“验证者”。任何愿意协助整个网络达成共识的参与节点都能成为验证者;作为回报,验证者会获得交易手续费和区块奖励。Tendermint整合这些验证者的投票结果,确定下一个区块的正确状态。
通过质押对抗女巫攻击
每个验证者的票都有自己的投票权重,投票权重通常是在创世块产生时确定,或是在开始运行后根据应用层开发者所设计的某些逻辑来决定。一般来说,由验证者锁在系统中的代币量决定投票权重的大小,这种质押物也被称为“保证金”。
Consensus共识
按照规则,验证者要按轮次对每一个区块达成共识。每一轮都包含三个基本步骤:提议阶段、预投票阶段、预提交阶段,以及两个后续步骤:提交阶段、新高度阶段。从抽象角度来看,验证者按照以下协议规则共同决定下一高度要使用什么区块:
首先是提议阶段,由指定的验证者提出一个区块——每一轮中的提议者都是从有序的列表中按照投票权重的比例,确定性地选择出来的。
接着进入预投票阶段——每一位验证者广播他们各自的预投票。
当该轮次中某一区块收到超过2/3的预投票,我们就称其为“polka”。一旦出现“polka”,就进入下一个阶段。
进入预提交阶段,由每一个验证者广播他们的预提交的投票。
动态 | 美国演说家Anthony Robbins开始科普什么是比特币:美国演说家安东尼·罗宾(Anthony Robbins)在自己的网站上发布了一篇比特币的科普文章,并在推特上向自己的粉丝介绍什么是比特币,目前他的推特账户共有粉丝304万人。[2019/1/1]
如果某一特定区块收到超过2/3的预投票,就进入提交阶段,这个阶段会将区块加入区块链,并增加区块高度。每当有新的区块加入区块链,所在区块链的区块高度就1。如果失败,则要么返回预投票阶段,要么回到预提交阶段。
要注意的是,在任何高度上,都有可能需要一轮以上的投票才能提交一个区块。因为可能出现以下情况:
被指定的“提议者”在应该提出区块时掉线
提议者所提出的区块违反一些预先定义的规则
Tendermint依靠超时机制确保区块链出块不会遇到延宕。如果在超时前,提议区块没有收到超过2/3的预投票,则由新的提议者再次进行提出区块流程。
协议细节详见此处。
总的来说,Tendermint选择了与比特币的中本聪共识、以太坊Ethash不同的路线,让我们做一些重点对比:
确定性与概率性
与中本聪共识和Ethash这类概率性共识不同,Tendermint是确定共识——这意味着Tendermint每个区块都是最终确定的,而不像比特币的区块只是处于“很可能”被确定的状态。
我们回顾一下中本聪共识,区块总是处于“未确定”状态——只有确定某个区块在“最长链”上,才能有把握认为该块正在被最终确定,这也是为什么比特币交易需要等“6个区块确认”。
而在Tendermint中,验证者成功投票及提交后,区块就立即被确认了。
固定验证者vs.可变验证者
中本聪共识及Ethash允许矿工随时选择加入或退出,并不需要其他矿工提前知晓。相反地,Tendermint共识要求维护一个事先知晓且固定的验证者集合,验证者身份是靠他们的公钥来辨认的。
领导vs.无领导
中本聪共识及Ethash没有指定领导者来提议下一个区块。另一方面,Tendermint选择领导者,或称为提议者,负责提出下一个区块。
明确的vs.模糊的超时机制
中本聪共识和Ethash没有使用超时机制来确保矿工一定能出块,而Tendermint有明确的超时机制保证区块链的出块过程不会遭遇延宕。
100个验证者vs.1000个验证者
Tendermint遵循传统的一致性共识算法,每个验证者之间都要进行通信。考虑到通信开销,Tendermint无法像比特币或以太坊那样可以无限增加验证者。Tendermint共识安排了100个验证者。
因此Tendermint的缺点之一就是,它要求事先知晓所有验证者,而且不允许验证者随时加入或退出;这与比特币或以太坊不同。
除此之外,Tendermint还要求整个系统维持统一时钟;虽然在实践中Tendermint已经证明通过整合每个节点的时间戳就能维护统一时钟,但大家都知道同步时间是个非常复杂的理论问题。
Tendermint的验证者少于比特币,而且要求事先知道验证者集合,因此可能会有人提出Tendermint共识协议“不够去中心化”的质疑。
但是,去中心化是见仁见智的。Okay,先不抖机灵,我想说的是去中心化是为了达到某种目标的手段,而不是目标本身;我不喜欢在了解去中心化的目标前就妄下评论。
我认为在许多案例下,只要破坏系统的代价够大,并且有针对攻击者的防御及惩罚机制,则Tendermint要求固定且事先知晓验证者集合的保守方法是可行的。
如果我们回顾预测市场的例子,我会说去中心化预测市场应用,根本不需要像健全货币或是价值存储应用一样具备这么高级别的去中心化程度,有10、20或100个验证者足矣。
以TruStory为例,我们使用CosmosSDK构建后端应用逻辑,将应用的状态和逻辑存在区块链上,而前端某种程度上是私有的——CosmosSDK允许我们建立用来赏善罚恶的激励系统、透明化展示数据层、允许用户分享网络的所有权及治理权,还可以共同决议未来的事务、踢出恶意使用者,并按照个人喜好针对用户层或基础层设计网络。对于开发者来说,他们也能基于后端区块链逻辑构建自己的开发工具及服务。因此有10个或100个执行并验证交易的验证者,就能够保障使用者和开发者对于透明性、所有权、责任归属的需求。
如果你能明白Tendermint以“选择固定且事先知晓的验证者集合”作为牺牲,所带来的利益,你会对这些原本不可能实现的神奇特性充满赞叹:
安全性及活跃度
Tendermint的协议保证安全性及活跃度。假设超过2/3的验证者投票权重没有掌握在拜占庭验证者手中,换句话说少于1/3的投票是恶意的,则协议就能保证网络的安全性及活跃度。
高性能
Tendermint共识的出块时间可以低至1秒,达到每秒处理数千笔交易的速度,让Tendermint更适合需要频繁交易的应用。
即时确认
在区块链世界中,最终确定性意味着一旦区块被提交上链,我们就能确定直至该区块之前的整个区块链的状态。
如我们前面提到的,中本聪共识有其概率性,所以没有办法保证最终确定性。你只能基于大多数矿工可能还在该分叉中挖矿的概率,保证你的交易所在的分叉链是共识链。
但是,Tendermint要求验证者对每个区块进行投票及最终确认。所以我们可以说,在少于1/3恶意验证者的情况下,交易能够被“即时确认”——当区块被创建出来,使用者就知道他们的交易已经被确认了。
责任制
Tendermint使用PoS作为抗女巫攻击机制——要求验证者质押代币,以确保节点不会通过创建多个虚假账户来系统。
PoS比PoW更节能,但是它固有的“无利害关系”缺陷导致验证者能轻易作弊。
Tendermint通过罚没保证金来处罚违反协议规则的验证者,避免发生无利害关系问题。说得更具体点,协议存在“锁定规则”,规范了每个验证者在投票给特定区块时能做的行为。举例来说,一旦验证者预提交投票后,它就被“锁定”在该区块;只有在下一轮中要让一个不同的区块成为polka时,该验证者才能解锁并预提交另一个区块。如果违反锁定规则,验证者会被罚没保证金。
更简单的轻客户端
轻客户端比全节点“更轻巧”,因为它们不存储区块链的所有状态,只存储区块头。除非是负责验证和出块的挖矿节点,或验证者节点,不然大部分节点其实不需要存储区块链全状态。
轻客户端下载从创世区块开始到当前区块的区块头,而不去下载和存储整条链。相比于全节点,轻客户端只需要存储少量数据,因为区块头就足以验证某些特定交易的有效性。
最酷的事情在于,基于Tendermint的区块链的轻客户端甚至无需同步所有区块头,只要周期性的下载区块头就行。
就像我们前面讨论的,Tendermint与比特币、以太坊不同,其所有区块都要经过投票及最终确认;因为每个区块都经过最终确认,所以轻客户端只要注意验证者集合的变化——只要知道最新的验证者集合,轻客户端就能下载最新的区块头,并验证这些区块都有大于2/3的验证者投票。
Cosmos网络层
如我们上面所说的,Tendermint的共识依靠验证者在每一轮进行投票来完成。因此,节点间必须能沟通及传递讯息,确保网络中所有参与者都能看到相同数据。
与比特币和以太坊一样,Tendermint使用gossip协议快速传播最新的区块链状态。
网路中的节点不一定要成为验证者才能在网络共识过程中发挥作用。举例来说,节点可以是轻节点或是全节点,而不是验证者;这类节点也被称为“非验证者节点”。
验证者及非验证者节点都要肩负传递数据的责任,以确保所有节点都能收到系统正在产生的信息和交易。
Cosmos应用层
目前,我们已经了解Tendermint网络层及共识层的核心组成部分;网络层负责网络中所有计算机之间交易的传递,Tendermint共识算法确保状态机的一致性。
但我们传递和验证的到底是什么交易?这里就引出了应用层。
Cosmos应用层负责:
定义和提交需要被记录进区块链的交易
在交易通过共识层提交后,持续更新区块链状态
使用CosmosSDK构建应用程序
CosmosSDK提供一套构建应用层的框架,就像是区块链界的Ruby-on-Rails,CosmosSDK也为开发者提供了一种基于Tendermint内核构建安全的区块链应用的框架。
要记住,区块链就是一个在所有节点将状态做相同备份的状态机,而CosmosSDK让你可以构建能在多个节点间进行复制的实际状态机。SDK让你自定义应用的状态、事务类型,及状态-转变函数所需的功能和工具。
Cosmos应用如何运行(抽象视角)
CosmosSDK提供一种“multistore”机制来定义及维护应用层状态机的状态。Multistore将应用层的状态划分到不同组件,通过各自的“模块”进行管理。
CosmosSDK的强大之处就是它独特的模块化设计,每个模块定义及维护一个状态子集,这些状态子集构成完整的区块链。举例来说:
银行模块:允许你在应用中持有代币,及进行代币转账
权限模块:允许你创建及管理账户和签名
质押与罚没模块:允许你通过编码构建PoS共识机制
每个模块都是个小状态机,可以相互聚合生成总体状态机。
应用开发者按照每个模块和修改状态的惯用逻辑来定义子集,除了CosmosSDK提供的模块,开发者还能调用第三方模块。
这种用于构建区块链应用的插件模块非常强大,因为它赋予开发者使用SDK或外部模块的灵活性。
应用层如何与共识层交互?
发生在应用层的交易通过区块链应用交互界面与Tendermint共识及网络层通信。
ABCI是Socket通信协议,连接Tendermint核心与应用。它可以兼容任何编程语言,也就是说使用CosmosSDK构建的区块链应用理论上能以任何语言编写,而不仅仅是Tendermint底层共识和网路层所用的编程语言。
注意:当前版本的Cosmos主要支持Golang,后续会加入更多语言。
总而言之,CosmosSDK允许开发者基于Tendermint内核构建去中心化应用,这个应用理论上能用任何语言开发,并通过ABCI连接Tendermint共识引擎。
将应用层与网路层、共识层剥离,能让开发者在开发各种类型应用的时候有更大的灵活性,再加上CosmosSDK允许这些应用以任何语言开发,让区块链App开发过程更像平常的应用开发的样子。
这与在以太坊上开发应用形成鲜明对比,因为后者要求开发者学习新语言Solidity,还要克服Solidity的诸多限制和缺陷,而且Golang比Solidity具备更多的开发工具,开发体验好上10倍。
除此之外,全部的以太坊App都基于单一网络进行操作,这么做的优势是这些App能够共享以太坊的标准,以及相应而生的规模效应;缺点是所有这些App都共享以太坊共识层,会受到新加入的应用体量大小的影响。此外,整个网络必须作为一个巨大的单元来管理,会被治理理念和意识形态分歧所束缚,使得扩展难以进行。
Cosmos区块链应用不会受到这些限制,每个应用都有独立的网络、自己的共识层及治理层。
开发者有很大的自主性来决定它们的共识层权限,还能选择基于代币质押数量推举公开的验证者集合,或是通过预授权设置私密验证者集合。这种自由选择验证者集合的规则,意味着区块链对于自己的链有更大的自主性。
当然,这样的好处伴随某些牺牲:Cosmos网路中的每个区块链应用都必须导入自己的验证者、社群,及经济体系;无法像以太坊一般,直接蹭用所有验证者、强大的社群,及已有的经济体系。
结论
在这第一篇文章里,我们对比了Cosmos网络中的区块链架构与比特币、以太坊的不同。这种架构赋予区块链应用对于自己的链更大的自主性。
在第二部分,我们要深入讨论Cosmos中相互独立的区块链如何进行交互;更重要的是回答“为什么区块链需要互相进行交互”。
声明:本文由Bitker研究院编译完成,Bitker研究院专注于区块链行业理论研究、前沿技术、二级市场分析等各垂直领域的研究.
1900/1/1 0:00:00作为世界领先的链下扩容平台,CelerNetwork主网已正式上线!Celer的Alpha版主网发布,版本号Cygnus天鹅座,标志着全世界首个广义状态通道网络的第一版主网正式开启.
1900/1/1 0:00:00尊敬的Hubi全球用户:Hubi原定于2019年7月8日14:00上线交易对CMMC/UEST,将延后至2019年7月8日15:30上线。由此给您带来的不便,敬请谅解.
1900/1/1 0:00:00尊敬的用户:根据VT/伏特币官方消息,VT/伏特币已更换完成为ERC20系列代币。BIONE交易所将于2019年7月2日15:30开启VT转入转出,已按1:1进行兑换,Bione交易所将不再支持.
1900/1/1 0:00:00本文是《2019上半年区块链项目融资分析报告》的节选。2019年上半年,整个行业经历了一轮“熊-牛”转换。先是IEO、DeFi、Staking等热点概念一个接一个成为行业风口.
1900/1/1 0:00:00央行研究局局长王信表示,央行直接发行数字货币有助于提升货币政策有效性,未来要推动央行数字货币研发,下一阶段将研究Libra等加密数字货币相关问题,探索数字金融更好支持实体经济发展.
1900/1/1 0:00:00