您正在查看: Cross chain 分类下的文章

科普 | Cosmos 区块链的工作原理,Part-1:比较 Cosmos 与比特币、以太坊

编者注:本文对 Cosmos 网络中区块链和比特币、以太坊进行了巨细靡遗的比较。作者先从区块链系统的栈层出发,分析了比特币、以太坊在不同栈层上的技术要点,最后回归到 Cosmos 网络中的区块链,概念解释尤为清晰,是不可多得的解释文。

鉴于文章实在太长,我们在文首附上了目录。

目录

  • Cosmos 是什么?
  • 区块链结构简介
    • 比特币栈层结构
    • 以太坊栈层结构
  • 基于比特币与以太坊构建应用程序
  • Cosmos 区块链结构
    • Cosmos 共识层
    • 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 是什么?

Cosmos 是这样定义自己的:

“一个由多条独立平行区块链组成的去中心化网络,每条平行区块链均采用 BFT 共识算法(例如:Tendermint 共识)。”

哇,好拗口啊!让我们把这个定义拆分成几个容易理解的部分。

独立平行区块链的去中心化网络
我在这里假设读者已经对区块链非常了解了!不过,我还是快速回顾一下:
简单来说,区块链是一个分布在许多计算机上的数据库,每台计算机上的数据库都保持相同的状态。换句话说,每台计算机上的数据库所包含的数据都完全相同。这些计算机共同组成了所谓的“区块链网络”。

比特币和以太坊都是区块链,而 Cosmos 是由许多这样并行运行的区块链组成的区块链网络。

如果你不能完全理解刚才说的,那么在进一步了解 Cosmos 工作原理之前,你最好再多读一些关于区块链的基础知识。(编者注:中译本见文末超链接《区块链是什么鬼》)

“每条区块链都采用 BFT 共识算法”

BFT 是 “Byzantine Fault-Tolerant(拜占庭容错)”的缩写。一条拜占庭容错的区块链能够在网络中部分节点宕机 以及/或者 作恶(即所谓“拜占庭式节点”)的情况下,保证网络依旧具备“安全性”与“活性”等性质。安全性与活性能够确保区块链网络中每个节点维护相同的状态。

插播:如果你想要更深入地了解什么是安全性(Safety)与活性(Liveness),请阅读我的这篇有关分布式共识的文章。(编者注:中译本见文末超链接《分布式共识的工作原理,Part-2》)

因此,一种 “BFT 共识算法” 乃是定义了计算机间通信与协调、使得区块链具有拜占庭容错能力的算法。Cosmos 网络中的所有区块链都采用某种 BFT 共识算法。

比特币和以太坊的共识算法不是典型的 BFT 算法。所以它们不符合 Cosmos 网络中区块链的定义。(值得注意的是,虽然它们不是拜占庭容错的,但仍然可以让比特币和以太坊等区块链加入 Cosmos 网络,仅仅需要一些额外的步骤。如果你觉得费解,不用担心——我们将稍后对此进行更深入的研究。)

插播:如果你还是不清楚什么是 BFT,我在这篇文章中写得蛮清楚了。(编者注:中译本见文末超链接《分布式共识的工作原理,Part-3》)

“Tendermint 共识算法”

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 上开发应用程序与使用比特币或以太坊有何不同。

Cosmos 共识层

Cosmos 网络中区块链使用 Tendermint 共识算法。Tendermint 是一个 2014 年诞生的开源项目,“旨在解决比特币工作量证明(Proof-of-Work, PoW)共识算法的速度、可扩展性与环境问题”。

Tendermint 共识算法是一个 “无视应用层(application-agnostic)的共识引擎”。从本质上讲,这意味着任何区块链都可以使用 Tendermint 共识算法,它是拜占庭容错的,并且使用 PoS 算法来抵御女巫攻击。

又是一大堆术语!我们好好说道说道。

Tendermint 共识是如何运作的?

回顾一下,共识算法的存在是为了保证事务执行后,状态机中保存的状态一致;而 Tendermint 共识算法定义了一种“能让所有节点对下个区块达成共识”的规则。

让我们看看相关因素及规则是如何运作的吧!

验证者

负责达成状态一致的节点称为“验证者”。任何愿意协助整个网络达成共识的参与节点都能成为验证者;作为回报,验证者会获得交易手续费和区块奖励。Tendermint 整合这些验证者的投票结果,确定下一个区块的正确状态。

通过质押对抗女巫攻击

每个验证者的票都有自己的投票权重,投票权重通常是在创世块产生时确定,或是在开始运行后根据应用层开发者所设计的某些逻辑来决定。一般来说,由验证者锁在系统中的代币量(作为质押品)决定投票权重的大小,这种质押物也被称为“保证金”。

Consensus 共识

按照规则,验证者要按轮次(round)对每一个区块达成共识。每一轮都包含三个基本步骤:提议阶段(Propose)、预投票阶段(Prevote)、预提交阶段(Precommit),以及两个后续步骤:提交阶段(Commit)、新高度阶段(NewHeight)。从抽象角度来看,验证者按照以下协议规则共同决定下一高度要使用什么区块:

  1. 首先是提议阶段,由指定的验证者提出一个区块——每一轮中的提议者都是从有序的列表中按照投票权重的比例,确定性地选择出来的。
  2. 接着进入预投票阶段——每一位验证者广播他们各自的预投票。
  3. 当该轮次中某一区块收到超过 2/3 的预投票,我们就称其为 “polka”。一旦出现 “polka”,就进入下一个阶段。
  4. 进入预提交阶段,由每一个验证者广播他们的预提交的投票。
    • 如果某一特定区块收到超过 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 个验证者

科普 | Cosmos 与 Polkadot 的五大区别

Cosmos 和 Polkadot 都是关注区块链互操作性的项目,关于二者之间的差别已经有过很多讨论。如果你还不熟悉这两个项目,Linda Xie 发过一串推特介绍过这两个项目,可以作为很好的入门材料。

虽然已经有很多帖子分析过这两个项目的区别了,但是我认为其中大部分都存在一定的偏向性或者不够详细。通过这篇帖子,我会从架构权衡到哲学等方面更深入地探讨这两个项目。

为什么要构建一条新的区块链?

为什么一些项目要选择从头开始构建一条专门承载应用程序的区块链,而不是以智能合约的形式在现有的区块链上编写应用程序呢?主要有以下两点原因。

首先,现有的智能合约平台不一定能满足应用程序所需的灵活性和可定制性。举例来说,如果你想搭建的应用程序需要自定义的哈希函数,那么把它编写到以太坊上会消耗很多 gas ,因为这个函数每调用一次都需要在以太坊虚拟机内执行一次。一种解决方案是提议将这个函数作为预编译合约添加至以太坊协议内。但是,除非这个函数也广泛应用于其它应用程序,否则这项提议大概率是不会通过的。从头开始编写一条新的区块链,你就可以自由灵活地设计区块链的核心逻辑,以此满足你的应用程序的需求。

其次是自治问题。在智能合约平台上构建的应用程序必须接受平台的治理并遵守其规则,从区块时间和 gas 定价之类影响用户体验的规则,到回滚之类改变状态的决策等等。

但相应的,具有自治能力的链失去了与其它应用程序进行无缝通信的能力,因为应用程序都是搭建在使用不同状态机的区块链上。Cosmos 和 Polkadot 都致力于解决这个问题——Cosmos 采用的是 Hub-and-Zone(中心-分区) 模型,Polkadot 则采用的是Relay Chain/Parachain(中继链/平行链)模型。

读者需要对这两个项目有一定的了解,本文侧重于梳理二者的不同点。

1.局部安全 vs 全局安全

Cosmos 和 Polkadot 采用的安全模型差别极大。简单来说,Polkadot 的工作流程如下:

Polkadot 的网络架构

平行链是 Polkadot 网络中的区块链。这些链有自己的状态机、自己的规则和自己的区块生产者,即核验人(collators)。每条平行链本质上都是一个独立的状态机,而且可以使用任何类型的特殊功能、共识算法、交易手续费结构等等。在 Polkadot 网络中,所有平行链都有同一条母链,叫做中继链,里面包含了由所有平行链组成的 “全局状态”。中继链拥有自己的共识算法,叫做 GRANDPA 共识(祖父共识),可以迅速将平行链上的区块确定下来。通过这个模型,Polkadot 的平行链实现了 “安全性共享”——如果中继链上有 1000 名验证者,具有极高的安全性,凡是连接到这条中继链的平行链都会受益。这样一来,平行链即能拥有自己的状态机并自定义规则,又能与成百上千条平行链一起共享母链的安全性。

这种模型的罩门在于由中继链上的验证者来验证平行链上的状态改变。例如,验证者可能会出于某种原因一直拒绝某条链上的核验人提议的区块,而且这条中继链上的区块永远无法被添加进全局状态。为了尽量避免这种情况,Polkadot 对验证者进行混洗,让他们随机验证平行链,降低同一位验证者始终验证同一条平行链的概率。Polkadot 还另设有一类被称为 Fishermen (渔夫)的验证者,他们会不断查验验证者是否存在恶意行为。

Cosmos 采用了完全不同的网络架构。

Cosmos的网络架构

在 Cosmos 网络中,每条链都是独立运行的,并设有自己的安全机制,而非像 Polkadot 那样采用 局部/全局 的安全性模型。每条链都有自己的共识机制,而且由单独的验证者来负责保护这条链的安全性。Cosmos 网络使用中心-分区模型来实现互操作性,每个分区(独立的链)都可以通过中心(同样是一条独立的链)向其它分区 “发送代币”。这个协议被称为 IBC (跨链通信),是链与链之间通过发送消息实现代币转账的协议。IBC 协议尚在开发之中,最开始先支持代币转账,最终会支持各类消息的跨链传递。

相比于 Polkadot 的架构而言,Cosmos 的架构最大的不同之处在于,每个分区的状态仅由各自的验证者保护。一个分区想要获得很强的安全性,就需要建立自己的验证者集,这对于小型应用程序来说会比较困难。不过,对于那些想要获得更多控制权的应用程序来说,这是个很大的亮点。例如,币安最开始就是用自己的节点来充当币安链的验证者,来促进去中心化交易所的持续运行。这样一来,币安在测试币安链并增加新功能的时候就有了充分的控制权。我觉得币安不太可能放弃决定哪些交易可以上链的权力,但若要在以太坊或 Polkadot 平台上开发,就不能不放弃这样的权力。正因如此,我认为 Telegram、Facebook 和 Kakao 这类公司会选择构建自己的区块链并掌握其控制权,未来也不太可能与别的链通信。

2. 治理和参与

Polkadot 和 Cosmos 之间的第二个主要差别在于治理和参与。在 Polkadot 网络中,只有一条中继链和一些与这条中继链共享验证者的平行链。根据目前的估算,平行链的数量上限为 100 条,不过未来有可能减少或增加。Polkadot 网络通过拍卖机制来竞拍平行链的使用权——出价最高的人需要在 PoS 系统中锁定一定数量的 DOT (Polkadot 上的原生货币),才可以在一定时间段内拥有所拍得平行链的使用权。这意味着要想使用 Polkadot 上的平行链,需要购买并锁定大量 DOT ,直到不想再使用这条平行链为止。

Cosmos 网络没有设置固定的参与规则——任何人都可以创建中心或分区。中心就是具有自治能力的区块链,专门用来连接其它区块链。这里有两个例子,一个是 Cosmos Hub,最近已由 Tendermint 团队上线;另一个是 Iris Hub,旨在连接主要运行于中国或其它亚洲国家的区块链 。这种中心-分区模型提高了跨链通信的效率,因为分区链只需要连接到中心,无需连接到其他每条链上。


中心-分区模型可以更高效地连接多条链

由于参与规则不同,这两个网络在治理流程上也存在差异。在 Polkadot 网络中,治理决策取决于投票者所质押的 DOT 数量。关于链上投票会有一套正式机制,不过尚未最终确定下来,点击此处可了解最新进展。除了采取以质押量决定投票权重的机制之外,Polkadot 还组建了一个委员会来代表不活跃的权益持有者。委员会最开始由 6 人组成,每两周增加 1 人,直到满 24 人为止。每位委员会成员均通过赞成投票的方式选出。治理流程的具体细节尚未敲定,也就是说有很多方法可以改变中继链的参数,如出块时间、区块奖励等,以及平行链的参与规则。例如,Polkadot 的治理流程可以改变平行链使用权的竞拍机制或所需的 DOT 数量。有一种常见的误解是 DOT 持有者可以通过投票随意弃用某条平行链。实际上,DOT 持有者只能改变参与流程。也就是说一旦竞拍下了某条平行链,在整个租期之内都享有这条链的使用权。

另一方面,Cosmos 网络不存在单一的 “治理”流程。每个中心和分区都有自己的治理流程,因此没有一套应用于整个系统内所有链的核心规则。我们所说的“Cosmos 治理”指的都是 Cosmos Hub 的治理,即由 Tendermint 团队上线的那条链。Cosmos Hub 的规则是,任何人都可以发送一个文本提议,由 ATOM 持有者进行投票表决,ATOM 的质押量决定了投票权重。想知道提议长什么样子,这里有个例子。如果你想深入了解治理流程的话,可以阅读一下 Chorus One 发布的这篇帖子,是了解 Cosmos Hub 治理机制的入门材料。

3.跨链通信

Polkadot 和 Cosmos 之间的另一个差别是跨链通信协议及其设计目标。Polkadot 旨在实现平行链之间任意的消息传递。也就是说,平行链 A 可以调用平行链 B 中的智能合约,实现与平行链 B 之间的代币转账或是其他类型的通信。Cosmos 则聚焦于跨链资产转移,其协议较为简单。目前,这两种通信协议仍待完善细则,而且尚未构建完成。可以查看 IBC(跨链通信)和 ICMP (平行链之间的跨链通信)这两种协议的细则。

跨链通信所面临的最大挑战不是如何将一条链上的数据在另一条链上表示出来,而是如何处理链分叉和链重组这样的情况。这是 Cosmos 和 Polkadot 在构架设计上最大的差异。

为了确保跨链通信的安全性,Polkadot 采用了两种不同的机制。首先是安全性共享机制,降低了信息交换的难度。 共享安全性的另一个好处是所有平行链都位于同一个安全层级,因此每条链可以彼此信任。为便于理解,我们以以太坊(安全性较高)和 Verge(安全性较低)的交互操作为例。若想在 Verge 链上表示以太坊,我们可以锁定一些以太坊,然后在 Verge 链上生成 ETH-XVG 代币。然而,由于 Verge 链的安全性较低,攻击者可能会向 Verge 链发动 51% 攻击,并向以太坊区块链发送双花交易,就可以取回比实际拥有数量更多的以太币。因此,在互相发送消息的时候,安全性较高的链很难信任安全性较低的链。如果是在安全层级各不相同的链之间互传消息,情况就会变得更加复杂。

从理论上来说,共享安全性是一种保障跨链通信的良好方式。前提是,这种协议要确保能够经常对验证者进行混洗,再随机分配到各条平行链上。这就会造成经典的 “数据可用性问题”,即每次验证者被分配到新的平行链上,就需要下载新链的状态。这是目前区块链领域最大的难题之一,Polkadot 能否解决尚未可知。

其次,Polkadot 引入了 Fisherman(渔夫)的概念,也就是 Polkadot 网络上的 “赏金猎人”,专门监视平行链上的恶意行为。从某种意义上来说,这是抵御恶意行为的“第二道防线”。如果某条平行链的验证者将一个无效块上链,Fisherman 发现后可以向中继链提交证明,将包括所有平行链在内的整个 Polkadot 网络的状态进行回滚。在跨链通信期间,最令我们担心的莫过于一条链在重组,另一条链却运行如常。Polkadot 就避免了这个问题,一旦发现无效块上链,整个网络都会回滚。

Cosmos 采用了完全不同的跨链通信方式。因为每条链上都有自己的验证者,所以很有可能会出现分区中的验证者串谋的情况。也就是说,如果有两个分区需要通信,A 分区需要必须信任 Cosmos Hub(通信枢纽)以及 B 分区中的验证者。从理论上来说,A 分区的人在决定向 B 分区发送信息之前,需要调查一下 B 分区的验证者。不过我觉得实际情况没那么糟糕。 Polychain Labs 或 Zaki Manian 的 iqlusion 等知名验证者节点可能会验证多条链,逐渐建立起良好的声誉。也就是说,当 A 分区的人看到 B 分区是由 Polychain Labs 和 iqlusion 验证的,可能会因此决定信任 B 分区。

然而,即使一条链得到了人们的信任,也有可能被怀有恶意的攻击者控制,出现各种问题。有一段对话中提到了一个很好的例子:

代币分散于不同分区的 Cosmos 网络

假设上图中的小红点代表一种名为 ETM 的代币,即 Ethermint 分区的原生代币。A、B、C 三个分区的用户想要使用 ETM 来运行各自分区内的一些应用程序,而且他们都信任 Ethermint 分区,因此通过跨链通信在各自的分区内接受了一些 ETM 。现在假设 Ethermint 分区的验证者串谋发动双花攻击,任意转移 ETM 代币。这也会对剩余网络造成影响,因为 ETM 代币也存在于其他分区中。不过受波及的只有 Ethermint 或其他分区中的 ETM 代币持有者。Ethermint 分区中的恶意验证者只能毁掉自己的分区,破坏不了其他分区。这就是 Cosmos 架构的目标——确保恶意行为无法影响整个网络。

Polkadot 则不同。如果中继链(全局状态)上发生了无效状态更新,又没被 Fisherman 发现的话,Polkadot 网络中的每条平行链都会受到影响。平行链不能被看作是完全不同的东西,毕竟它们都共享同一个全局状态。

4.共识算法

Polkadot 中继链采用的是 GRANDPA 共识算法。这个算法能让中继链迅速确定来自所有平行链的区块,并且容纳大量验证者(1000 名以上)。简单来说,这是因为并非所有验证者都需要对每一个区块进行投票——他们可以只需为自己认为有效的某个区块投票,相当于这个区块之前的所有区块也都得到了认可。通过这种方式,GRANDPA 算法可以找出一组得票数最多的区块,并将这组区块确定了下来。该算法仍处于开发之中,尚不知实际会如何执行。

平行链可以采用不同的共识算法达成局部共识。Polkadot 提供一个软件开发工具包(Substrate),其中包括 GRANDPA、Rhododendron 和 Aurand 三种开箱即用的共识算法。今后可能会有更多算法被加入 Substrate ,皆可应用于 Polkadot 网络。

在 Cosmos 网络中,每条链可以选用的共识算法有很多,只要是符合 ABCI 规范的共识算法即可。 ABCI 规范旨在实现跨链通信的标准化。目前只有 Tendermint 算法符合这个规范,还有另一些团队也在努力开发符合该规范的其他共识算法。从更抽象的层面上来看,Tendermint 算法的原理是让每位验证者都能互相通信,共同决定一个区块能否上链,这样就能实现单一区块层面上的确定性。该算法的速度很快,而且通过了 200 名验证者的压力测试,在 Game of Stakes(权益争夺赛)中的出块时间为 6 秒。Cosmos 团队也提供了一个软件开发工具包,里面包含了开箱即用的 Tendermint 算法。这篇文章很好地介绍了共识算法,以及 Tendermint 算法的功能。

Tendermint 算法最大的缺点是验证者之间的通信成本高很高。也就是说,虽然验证者人数在 200 左右的时候,算法的运行速度很快,一旦人数涨到了 2000 ,速度就会慢得多。另一方面需要权衡的是异步环境中的安全性。也就是说,在出现网络分区之时,不会出现两个不同的交易历史最终合并成一个(而另一个交易历史被抛弃)的情况,而是整个网络都将停止运行。这点非常重要,一旦一笔交易得到了“最终确认”,即使是在最差的网络环境下也不会被撤销。

我的个人观点是,基于共识算法来比较这两个项目没什么长远意义。这两个项目的构架未来都将接受不同的共识算法。如今的绝大多数应用不管使用的是 Tendermint 算法还是 Polkadot 的某个共识算法都可以良好运行。

5.Substrate vs Cosmos SDK

Polkadot 和 Cosmos 都提供软件开发工具包,分别叫作 SubstrateCosmos SDK 。二者的目的都是为了便于开发者搭建自己的区块链,其中包括各种开箱即用的模块,例如治理模块(投票系统)、质押模块和认证模块等。这两个工具包最主要的区别在于,Cosmos SDK 仅支持 Go 语言,而 Substrate 支持任何可编译为 WASM (Web Assembly) 的语言,给予了开发者更多灵活性。

这两个工具包都是构建区块链的全新框架,未来几年还将新增更多功能。关于这两个工具包的深度剖析以及使用这两个工具包开发应用程序的详细体验需要另外写一篇文章了。如果你感兴趣的话,请在推特上给我 @juliankoh 留言。

结论

虽然这篇文章篇幅很长,写的也很详细,但是依然有所疏漏。Cosmos 和 Polkadot 之间的不同点很难把握,可能还有很多细节我没有捕捉到。要全方位了解这两个项目绝非易事,毕竟项目文件随时都可能改动。这两个项目尚在起步阶段,未来一年将得到极大的发展——我在上文中提到的几个点可能很快就不成立了。总而言之,我认为 Polkadot 相比 Cosmos 主要有以下几个优势:

  1. 应用程序开发者不需要自己维护安全性
  2. 共享安全性模型下的跨链通信更容易解决数据可用性问题
  3. Substrate(在 WASM、更多共识算法和开箱即用模块方面)表现出很大的野心
  4. 相比跨平行链的合约调用更侧重于不限类型的信息传递(这一用例目前尚不明确)
  5. 1.0 版本的开发者似乎多一些

反过来,Cosmos 相比 Polkadot 主要有以下几个优势:

  1. Cosmos 已经上线了,Polkadot 还没上线
  2. Polkadot 的平行链参与流程限制性更强,而且成本更高
  3. 更能满足特定项目(如币安)对自定义的需求
  4. 平行链上验证者的恶意行为会波及整个网络。在 Cosmos 网络中,恶意行为只能破坏个别分区和资产
  5. 已经有很多项目在使用 Cosmos SDK 了
  6. 重点关注如何降低资产转移的难度。目前已经有经过验证的用例。

感谢每一位不厌其烦为我答疑解惑的朋友,尤其是来自 Cosmos 团队的 Zaki ManianGautier Marin ,以及来自 Polkadot 团队的 Alistair Stewart 。NEAR Protocol (Alex Skidanov) 发布的 Whiteboard Series 系列视频很棒,对我理解这两个项目给予了很大帮助。Linda Xie 整理出来的关于 Polkadot 和 Cosmos 的链接帮助我缩小了文章的范围,让这篇文章更具有可读性。特别感谢 Cheryl Yeoh 在我撰写本文的过程中为我提供的灵感和思路,并且对本文进行了审校。

转载自:https://ethfans.org/posts/5-differences-between-cosmos-polkadot

引介 | Cosmos 如何与 Ethereum 相连?

跨链加密货币资产转移是开发团队在 Cosmos 中实现的核心功能。在 Cosmos 生态中,加密资产可以通过 IBC 协议进行转移。IBC 协议是一种能够促进互操作能力的跨链通信协议(Inter-Blockchain Communication Protocol)。值得一提的是,IBC 协议只有在转出和转入区块链都具有最终性时才能使用。

但是,比特币和以太坊都不具有最终性保证;他们都是概率最终性。[注:不久的将来 Casper the Friendly Finality Gadget (FFG) 实现后,以太坊会具有最终性。(编者注:中译本见文末超链接)] 概率最终性意味着,随着某个区块后面的链的长度的增加,这条链也就更不容易被重新组织,也就更能让我们相信这个区块是“最终的”。但是因为概率最终性不能完全防止区块链的重新组织,所以通过 IBC 协议安全地跨链转移资产是不可行的。这就提出了一个问题:Cosmos 分区(Zone)是如何与已经存在的不具有最终性的区块链进行互操作的。

挂钩分区(Peg Zone)

挂钩分区是 Cosmos 的解决方案。一个挂钩分区是一条基于账户模式的区块链,它将 Cosmos 中的分区与像 Bitcoin、Ethereum 这样的外部的区块链连接起来。它扮演了一个适配器分区的角色;或者是像在 Casper 演讲中说的那样,它是一个“最终性工具”。通过设定一个“最终性阈值”,当区块链中新增一定数量的区块后认为区块链具有了伪最终性(Pseudo-finality)。一般来说,这种“连接”分区设计可以被认为是一种两路挂钩(2WP)。

Tendermint Core这样的共识引擎提供了实时最终性。如果想更好的了解它是如何工作的,请阅读关于 Tendermint 共识的更多内容

连接以太坊

以太坊挂钩分区将是 Cosmos 中第一批实现的这种分区之一。它与 Ethermint 非常不同,后者剥离了 PoW 挖矿,然后在 Tendermint 共识机制和新的网络协议栈之上实现 EVM。而以太坊挂钩分区会使得 ERC20 代币和以太币能够在原生的以太坊和 Cosmos 网络中通过 IBC 连接的所有分区间转移。

挂钩分区的细则还在开发中,你可以关注它的 Github 代码库: Peggy

Peggy

在 Cosmos 中,因为我们可以使用 IBC 协议转移任何加密资产,所以容易进行互操作。然而,在 Cosmos 和以太坊之间转移加密货币在技术上是十分复杂的,这是因为 IBC 数据包不能以太坊中被高效地解码。这又是因为 EVM 没有设计成与 IBC 兼容。这些问题只有 Peggy 才能解决。

Peggy 有一个曲折的开端。第一个尝试把 Cosmos 和以太坊连接起来的是一个叫 ETGate 的黑客马拉松项目,但后来证实 ETGate 需要大量消耗 Gas。ETGate 是由 Joon 设计的,他是第二届 HackAtom 的大奖获得者。他也加入了 Cosmos 开发 Peggy。

ETGate 最初尝试直接将 Cosmos 枢纽(Hub)和以太坊连接起来的。它尝试在 EVM 内部编译出兼容性。就像这样:
[ 以太坊 ] <- ETGate -> [ Cosmos 枢纽 ]

当面对 Tendermint 和以太坊使用不同的构件的问题时,这种设计是非常不实用的。Tendermint 中使用的每一个基础构件都与以太坊中的基础构件不兼容。事实证明,尝试在 EVM 中客服兼容性问题、构建可互操作区块的成本非常昂贵。

以下是构建可互操作区块的模块分析:
  • 序列化格式: Tendermint 的序列化对象的编码方法是 go-wire。以太坊用的是 RLP (Recursive Length Prefix)。
  • 签名方案: Tendermint 使用的是 ed25519,而以太坊用的是 secp256k1。
  • 数据结构: Tendermint 把键值对存在 IAVL+ 树中,而以太坊把它们存在 Patricia 树中。

ETGate 的设计消耗大量计算资源,因为它在 EVM 中解码 IBC 数据包。IBC 数据包中的内容是 Tendermint 头、交易、IAVL+ 树证明和 ed25519 签名。

在意识到我们可以通过把解析转换机制放在 EVM 之外,即定制的区块链中完成,此方式将节省大量 Gas,Peggy 的设计思路就变得清晰了。

Peggy 的 5 个组成部分

  1. 以太坊智能合约:将会有一组以太坊智能合约扮演资产保管人的角色,它们能够保管以太坊中的代币和 Cosmos 中的代币。
  2. 见证人(Witness):见证人组件能够证明以太坊中发生的事件。100 个区块(也就是最终性门槛)产生之后,见证人会在不具有最终性的区块链上实现伪最终性。它运行一个完全验证的以太坊节点,以便通过将 WitnessTX 提交到挂钩分区中来证明以太坊中的状态更改。我们在这里使用一个共享的安全模型,让一组 Cosmos 枢纽验证人同时作为挂钩分区的见证人。
  3. 挂钩分区:挂钩分区是建立在 Tendermint 上的,用于连接不同类型区块链。它允许用户执行或者查询交易。这就是 Cosmos 如何与以太坊进行通信的。
  4. 签名者:签名者使用以太坊能够解析的 secp256k1 签名方案对信息进行签名,以便智能合约能够高效地验证签名。签名组件通过 SignTx 消息生成一个 secp256k1 签名并将其发布到挂钩分区中,以便在管道中的智能合约中转发事务进行验证。
  5. 中继器: 中继器组件批量转发交易信息。这些交易由签名者模块进行签名后被转发到以太坊智能合约中。

总结

现实世界中的例子:把 Cosmos 中的代币转到以太坊中
例如,你想取出一些 Cosmos 的 Photon 代币并且把他们变成等值的以太币。该怎样利用 Peggy 完成的呢?为简单起见,我们会略去低层次的技术细节,只描述主要的流程。

  1. 首先从 Cosmos 枢纽中开始。你先通过 IBC 协议把一些 Photon 转移到挂钩分区中。挂钩分区接收到传来的 IBC 数据包:一个包含发送 Photon 代币的消息。签名者监视着这个挂钩分区并且对这些 IBC 交易进行签名,高效的把这些签名转换为以太坊能解析的 secp256k1 格式的私钥。这样一来,你的交易就在挂钩分区上完成了签名。
  2. 关注这个挂钩分区的中继器等到他们看到超过 2/3 的签名者这个交易进行了签名,然后将你签署的交易批量处理为通过 IBC 发送的所有其他交易的清单。然后他们把附有签名的列表转发到以太坊智能合约运行的 EVM 上。
  3. 以太坊智能合约接下来检查交易列表是否有效。针对 Photon 智能合约会生成它的 ERC20 版本。智能合约产生 ERC20 Photon 之后,它将 ERC20 Photon 发送到你在以太坊主网中的地址上。
  4. 此时,你可以方便地通过例如 0x protocol 或是 OmiseGO 这样的 ERC20 去中心化交易所(DEX)把 ERC20 Photons 转换成ETH。

最后

我们正在进行 Peggy 的早期设计。相关以太坊智能合约已经编写完成并且正在进行测试。在许多方面上,Peggy 甚至比 Cosmos 枢纽更加复杂。为了使其能正确的运行,Peggy 将需要进行数次迭代。大家可以期待 Peggy 在今年下半年上线,也就是在 Cosmos 主网上线后。对于以太坊项目而言,很多问题都亟待解决:可扩展性解决方案的需求,吞吐量的增加以及降低运行成本。以上问题都十分重要。因此,Peggy 的部署是重中之重,在开发其余生态系统项目的同时,Cosmos / Tendermint 团队已经将其大部分资源用于 Peggy 的开发。

正在进行的工作

以太坊智能合约一旦部署之后就无法修改,因此非常难以更新。在智能合约更新管理方面还缺乏组织结构。Peggy 的发展路线图迫使我们应对这种不确定性,但这是我们希望能够产生具体解决方案的一个研究领域。

转载自:https://ethfans.org/posts/the-internet-of-blockchains-how-cosmos-does-interoperability-starting-with-the-ethereum-peg-zone

干货 | 共识算法的比较:Casper vs Tendermint

权益证明的漫漫长路

权益证明的定义可以查看理解权益证明。

1982年,拜占庭将军问题首次被Lamport,Shostak和Pease提出。Cosmos的Ethan Buchman这样描述它:”这是一个在可妥协的通信网络中实现分布式协议的问题,也就是在不可靠的环境中建立一个可靠的系统的问题“。从1982年到1999年,都没有人能够创造一个可以解决拜占庭将军问题系统。长久以来,拜占庭将军问题与计算都是无关的,因为在那个时候,互联网演进出基于云的中央中心化计算模式,所需要解决的只是容错问题。

所以,故障容错算法得到普及,例如1998年发明的Paxos算法和2013年发明的Raft算法被广泛的应用。而1999年发明的实用拜占庭容错(PBFT)却没有被学术界之外采用。直到2008年,中本聪将网络规模级别的分布式拜占庭容错(BFT)算法设计到区块链方案中,才使拜占庭容错得到推广。当这种原型出现之后,系统研究界的人都开始围绕将学术界“奇物”应用到真实世界而去构思各种想法。

在2011年,BitcoinTalk论坛对一个叫做权益证明(PoS)的概念组织了一场讨论。最初的PoS协议例如点点币,实现结果的并不理想。第一个真正提出将BFT研究应用到PoS公有区块链环境中是Jae Kwon,他在2014年创造了Tendermint。

在当时,PoS研究做出了很大的假设:假设系统中的一系列对等节点都是静态的,并且在长时间内都是稳定的。在区块链环境中完全是不现实的。 Jae Kwon的重大突破是使Tendermint能够使用区块,哈希链接,动态验证器集合和循环的领导者选举来将BFT研究适应复制状态机(区块链)的领域。

在Tendermint环境中,出现了大量的共识算法(Honeybadger, Ouroboros, Tezos, Casper),它们都包含了BTF研究的元素以及在区块链上其他模块观察的元素。

为权益证明做的所有研究都指向一个重要问题:在不耗尽物质稀缺资源的情况下,我们可以达到工作量证明(PoW)的安全级别吗?这个问题可以转化为:PoS的投票权以链上货币计价而不是计算力计价。区块链的POS共识问题比可扩展性更被广泛讨论,运行PoW挖矿的高开销成本以及环境外部性方面存在的问题都刺激了大量资源涌入PoS安全研究。

本文主要探讨了在加密货币中使用了权益证明的三个主要PoS协议的特性:由Vlad Zamfir带领研究的Casper the Friendly Ghost(CTFG)和由Vitalik Buterin带领研究Casper the Friendly Finality Gadget(CFFG)以及Jae Kwon带领研究的Tendermint

权益证明的陷阱

无利害关系

起初,有多种不同的说法来描述权益证明的一般陷阱,无利害关系就在这时被提出。Jae Kwon 2014年5月以“错误选择谬论”的不幸名字第一次提到这个问题。在2014年7月Vitalik把比特币开发者所描述的确切定义的问题普及推广为“无利害关系”。问题呈现出此情况:验证者通过在给定高度为多个有冲突的区块投票可以有效的破坏安全性而不用付出任何代价。

简单的PoS实现对于这些攻击而言是非常脆弱的。灾难性的是,因为没有任何的激励来鼓励大家永远集中在一个独一的链上,并且每次激励都要同时在相互冲突的链条上进行重复签名,所以为了获得更多的区块奖励,在经济上最优的策略就变成了尽可能的在多个分杈上进行投票。下面这张图就展示了:

在简单的PoS设计中竞争链上的期待投票数高于单一链上期待的投票数

在工作量证明中,对于在多个链上进行挖矿的矿工“惩罚”是他们必须分开他们的计算力(非常稀缺的资源)。在现代非简并的PoS设计中,这种成本必须嵌入到协议里面以此模仿物理PoW挖矿的限制。

Vitalik Buterin在2014年1月引入的“slasher”概念或协议内惩罚可以减轻这个攻击。Jae Kwon在同一年进一步推算了此方法,这是实现Tendermint共识协议的第一个迭代进展。苛刻以及允许这种惩罚的条件,对于所有的非简并BFT协议都是有帮助的,甚至在本文中出现的三种共识都采用了。

远程攻击

远程攻击来源于用户不得不撤回保证金的权利。这就产生了一个基本问题,因为这意味着攻击者可以从任意长度的距离建立一个分杈而不用担心被削减。一旦保证金被解除绑定,激励不从某个高度区块前进行长距离投票就被取消了。换句话说,当超过2/3的验证者解除了绑定,那么他们就可以恶意的创造包含之前验证者集的第二条链,这可能导致任意的交易。

对于权益证明协议这是相当致命的,因为安全模型必然是“主观”的。当参与网络要求大量的社会信息,那么这个安全模型就会被称为是“主观的”。一个新节点加入网络之后,对于当前网络的状态可能会得出不同的结论,因为他们的决策是基于主观信息的,即社会声誉。在相反面,工作量证明的安全模型必然是“客观的”,因为当前网络状态总是工作量最多的那个状态,新节点对于网络状态的结论总是相同的,因为他们的决策是基于客观信息。

PoS的远程攻击在弱主观性模型下进行了纠正,这要求接入到网络中的后续新节点:

  • 当前必须是被绑定的。只相信当前有保证金的验证节点
  • 解除绑定保证金必须要经过一个"解冻"期。解除绑定之后,代币需要数周到数月的“解冻”时间,用以实现“同步性”前提(即延迟的消息)
  • 禁止在N个块之前恢复,其中N是保证金的长度。 这个规则使任何长程分杈无效。
  • 可选择的将验证者集存放在PoW的链上

Casper(s)和Tendermint采用一种简单的锁定机制(“Tendermint”中俗称“冻结”)来锁定股权一段时间(几周到几个月后“解冻”),以防止任何恶意联合验证者 违反安全。在CFFG算法中,一个分杈选择规则永远只能修改最终块之后的块阻止了远程攻击。通过使用时间戳,在CFFG中的长距离分叉试图修改比最终块还要更早的块的时候会被协议直接忽略掉。

卡特尔形式

第三,最后的障碍是面临任意价值的任何经济形式都将面对一个真正的寡头垄断问题,就算本土加密货币也不例外。

“加密货币令人难以置信的集中,挖矿算力也是一样。寡头垄断竞争是很多现实市场的常态。少数相对富有的验证者之间的协调比多数相对贫穷验证者之间的协调要容易的多。在我们这种情况下,卡特尔形式是完全被预料到的。”
——Vlad Zamfir,Casper的历史第4章节

Tendermint依靠额外协议管理方法来与寡头垄断验证者进行对抗。虽然在审查制度方面没有任何协议措施,但依靠带外社会信息解决卡特尔形成,其中的基本原理是:用户最终将不可避免地注意到卡特尔的形成,社会上也会对此到处八卦,然后放弃或者投票重新组织受到攻击的区块链。

到目前为止,Vlad的Casper协议是唯一一个明确使用共识内审查激励来打击卡特尔形式一种模式。

概述

有很多不同的方式来实现权益证明的算法,但是权益证明设计的两个主要原理是基于链的PoS和基于拜占庭容错(BFT)的PoS。Tendermint是基于拜占庭容错的PoS设计,CTFG是基于链的PoS设计,而CFFG则混合了两者。

计算机科学中的CAP理论返回在分布式数据系统中提供超过2/3担保的不可能性:可用性、一致性、分区容错。基于链的PoS算法倾向于选择可用性高的而不选择一致性高的,因为可用性高意味着所有的交易都能被处理,不过要以牺牲整个网络中一致性状态复制为代价。基于BFT的却相反,会倾向于选择高一致性。

基于BFT的权益证明

拜占庭容错共识算法源于30多年的丰富研究。Tendermint(2014)是Castro和Liskov在1999年引入的实用拜占庭容错(PBFT)算法的第一个PoS的改编版。基于BFT的PoS协议伪随机的安排一个验证者在多轮投票的过程中提出一个区块。但是,提交和最终化区块取决于大多数——所有验证者中2/3的验证者在提交的区块中签名。在区块最终化之前可能需要进行几轮(译者注:这种多轮投票和现实世界的波尔卡舞蹈类似, 这也是polkadot 名字的由来)签名。BFT系统只能容错1/3的失败,其中失败包括故障或是恶意的攻击。

Tendermint核心

Tendermint主要包含两个主要的技术:区块链共识引擎和通用的应用接口。共识引擎被称为Tendermint核心模块,确保相同的交易在每个机器中都按照相同的顺序被记录下来。应用接口被称为应用区块链接口(ABCI),让交易可以被任何编程语言编写的程序处理。

在核心模块中,Tendermint基于循环投票机制进行工作,这也是共识协议的原理。一个回合被分成3个处理步骤:验证者提出一个块、发送提交意图、签名后提交一个新区块。这种机制为原子广播提供了一个安全的状态复制机,增加了一个责任层——安全故障可以完全归结于Tendermint。

Tendermint共识算法从验证者集开始。验证者们都维护了一份区块链的全拷贝,并且可以用公钥来识别验证者的身份。在每个新的块高度他们轮流的提出一个区块。每轮投票都只有一个验证者可以提出块,并且要用验证者相应的私钥对此进行签名,这样的话如果有错误发生就可以找到为此负责的验证者。然后剩下的验证者就需要对每个提议都进行投票,投票都需要用自己的私钥进行签名。这些组成一个回合。不过可能因为网络的异步需要好几个回合才能提交一个新块。

验证者提交块的时候由于几种原因可能会失败:当前的提议可能下线了,或者网络可能遇到了延迟。Tendermint允许验证者可以被跳过(就是轮到一个验证者出块的时候但是此验证者没出块)。验证者在移到下一轮投票之前等待一小段时间来接收提议者(此轮出块的验证者)提出的整个区块。这种对超时的依赖让Tendermint成为一个弱同步协议,而不是一个异步协议。不过,剩下的协议是异步的,并且验证者只有在接收到了超过2/3的验证者集消息时才会进行处理事物。正是因为这样,所以Tendermint需要大多数的验证者可以100%正常运行,如果1/3或更多的验证者离线或脱机,网路就会停止运行了。

假设少于1/3的验证者是拜占庭,Tendermint保证安全永远不会被破坏——也就是,验证者(2/3以上)永远不会在同一个高度提交冲突的区块。因此,基于Temdermint的区块链永远不会分叉。

目前为止,Tendermint的设计决策确实是把安全性和不可改变性地位放在了灵活性之上。在现实世界上有相当高的可能性是,系统真的会停止运行,参与者将会需要在协议外组织在某种软件上更新后重启系统。

在数字加密货币社区中只有少数人理解 Casper以及为什么它很有价值的时候,Tendermint就为Casper研究奠定了基础。这个洞察力就是:如果一个链的本身是高度容错的,那么你就可以依赖链来对于谁来生产区块做出一个好的决定,但是如果链的本身就是不可靠的,那么你就陷入了鸡和鸡蛋的问题中去了,这也是之前所有其他共识算法的灭顶之灾。

这个设计决策被认为不如可用性优先的协议例如以太坊和比特币。比特币中的权衡是:如果它的网络被分裂了,比特币在各种攻击的情况下就失去了它的安全保证。这其实就是一个不可修改理论,也就是你的置信区间是100%的时候,那么你跟随的就是一条正确的链,你会使用这条链来选择谁来生产下个区块,但是一旦你转移到一条不安全的链上之后,并没有一条明确的路径让你回到正确的链上。

Tendermint的明确属性
  • 可证明的活跃性
  • 安全阈值:1/3的验证者
  • 公有/私有链相容
  • 即时的最终确定性:1-3秒,取决于验证者数量
  • 一致性优先
  • 在弱同步性网络的共识安全

基于链的权益证明

基于链的权益证明模仿了工作量证明共识算法,在此权益证明中协议让伪随机选择出来的验证者产生一个新块,新块是哈希连接(包含上个块的哈希值)到前一个最长链的父区块上。基于链的PoS非常依赖同步的网络,通常优先考虑可用性而非一致性。Casper(s)对于倾向于活跃性而非安全性环境而言,它就是Tendermint核心思想的一个改编。

CFFG

CTFG是一个明确的PoS构造,但是CFFG是一个覆盖在已存在的以太坊PoW提议机制上的PoS——融合了PoW和PoS两者,由Vitalik Buterin带领实现。

比特币和以太坊的PoW共识协议都不会做“最终”决定,并且区块可能会潜在的被重新组织到一些过去区块高度。当区块没有机会再被修改的时候才能称为“最终确定”的。因为工作量证明没有提供这样的修改保证,所以它被认为是共识不安全的。相反,当我们持续加长链的时候区块的最终确定性概率也越来越高。为了为以太坊区块链增加想要的最终确定性和51%的攻击阻力,CFFG实现的逻辑就完美的提供了这种效果。

CFFG将通过多个步骤推出,以保守的方式将以太坊的PoW安全模式逐渐过渡到PoS安全模式。Casper的第一个迭代将会是实现这里讨论的混合PoW/PoS协议,Casper的最后一个迭代很有可能吸取CFFG和CTFG的教训,朝着一个完整的PoS协议发展。

CFFG是基于链的PoS和基于BFT的PoS的之间的混合体,因为它吸取了两者的思想。它的模块化覆盖设计让现在的PoW链的更新变得更加容易,因为它对于将系统升级到完全不同的共识模式而言是一种更保守的方法。

Casper的应用逻辑存在于智能合约的内部。要想在Casper中成为验证者,必须要有ETH并且要将ETH存储到Casper智能合约中作为杠杆的权益。在Casper第一次迭代中区块提议的机制会被保留:它依然使用Nakamoto PoW共识,矿工可以创建区块。不过为了最终化区块,Casper的PoS覆盖掌握控制权,并且拥有自己的验证者在PoW矿工之后进行投票。

Casper的PoS共识最重要的一个部分就是检查点(checkpoints)。Casper在50区块增量的时候评估最终确定性就称之为检查点,每50个块片段就称之为周期(epoch)。通过验证者在每个周期发送投票消息时触发这个处理过程。

在一个周期前最终化检查点需要2个周期才能完成,也就是需要两轮投票。例如,当超过2/3的验证者(也就是大多数)给一个检查点c投票了,那么就说这个检查点已经被"审判"了。下一个周期,当大多数人给检查点c投票了,会发生两件事情:c变成了被审判的并且c已经最终化了。c这个周期也就代表着最后一个最终化的周期(LFE)。

回顾一下,一个区块最终化需要两个条件:

  • 大多数(超过2/3)验证者在周期1的时候给区块1进行了投票,因此审判了区块1
  • 大多数(超过2/3)验证者在周期2的时候给区块2进行了投票,区块2是区块1的子区块,因此在周期2的时候最终化了区块1

在理想执行中,一个区块的最终化是按照下面的步骤的:
区块1的2/3投票→审判区块1→2/3投票区块2→最终化区块1

其中区块2是区块1的子区块

当一个检查点被最终化之后验证者就会得到报酬。不过,如果有两个最终化的检查点在相同高度上分杈时,那么就破坏了安全性,这个时候就达到了消减的条件,最少1/3的保证金将会被消减掉。当安全性被破坏的时候可以将错误归因的证据当作交易广播给PoW的矿工。然后PoW就将这个证据交易组成一个区块来进行挖矿,提交了这个证据的验证者会得到查找者的费用。当此事发生的时候,签署了在冲突区块的有罪验证者将会在两条链上被消减掉。

现在如果一个矿工进行蛮力攻击,那么会发生什么?现在Casper的最终化区块链可以防止PoW的攻击者,就算是51%或者更多的计算力重写最新检查点之外的历史也会被阻止。因此,Casper协议提供了安全。不像CTFG,因为CFFG就是不同提议机制上的一层覆盖,Casper不能确保活跃性,因为活跃性是取决于提议机制的。

验证者是被激励着集合在权威链上的,因为如果他们持续在不同的链上进行投票将会受到惩罚。Slasher 2.0的形成让验证者不仅仅会为双重投票而受罚也要为在不正确的链上进行投票而受到惩罚。不过这也造成了一个“泄气”的窘境,因为验证者担心如果出现一个分杈而自己不确定到底哪个才是权威的,然后投错票之后被消减所以选择退出投票。

CFFG的明确属性

  • 最终化:超过20分钟最终化。每隔50块(一个周期)就最终化一次区块,防止PoW挖矿暴利攻击
  • 共识安全性
  • 可证明的活跃性
  • 优先可用性

CTFG

CTFG是Vlad Zamfir的正确构造(CBC)共识协议专用于对抗寡头垄断的真实世界的环境。CTFG是工作量证明中GHOS或GHOST协议的PoS改编版,用于其分杈选择规则。CTFG背后的指导设计原则是基于加密经济学的,使用旨在实现评估安全的正规方法。与前面详细说明的CFFG混合协议不同,CTFG是纯粹的权益证明的概念。

“Casper刚刚开始的时候只是简单的‘友好的幽灵’,它对于PoS而言是GHOST的改编,完善的激励让卡特尔‘友善地’变成‘非卡特尔’的验证者。”
——Vlad Zamfir,Casper的历史第5章

与工作量证明类似,CTFG会为一致性和可用性进行权衡。特别,在区块没有被最终化的时候,随着在链中的深度越深的它们就会越安全。CTFG与CFFG有一点相似,链头部的处理总是比区块最终化的处理要快很多。

Casper的PoS提议机制与Tendermint提议机制最大的区别是相比较伪随机选择领导者,前者的验证者可以基于自己见到的块提出块。

Casper提供的一个独特功能是参数化安全阈值。与比特币中使用6个确认来确定一个经济最终状态类似,CTFG中的“评估安全”提供了一个验证者可以有一个与其他验证者不同的安全阈值功能。Casper的设计目标是在网络维持PoS低开销的时候能够允许验证者选择自己的容错阈值。

Casper对Tendermint的核心优势在于网络随时可以容纳一定数量的验证者。因为Tendermint中的区块在创建的时候需要最终化,所以区块的确认时间应该短一点。为了达到短区块时间,Tendermint PoS能够容纳的验证者数量就需要有个限制。由于CTFG和CFFG到在区块创建的时候都不需要安全性,所以以太坊网络相对于cosmos容纳100个验证者来说,可以容纳验证者的数量会更加的多一点。

CTFG的明确属性
  • 可用性。Casper的节点在它们达成共识之前可以块分杈
  • 异步安全性
  • 生存。Casper的决策可以在部分同步中存活,但是不能在异步中存活
  • 卡特尔阻力。Casper的整个前提是建立在抵制寡头垄断攻击者基础之上,因此不会有任何勾结的验证者可以超越协议
  • 安全性。取决于每个验证者的评估安全阈值

未来的工作

公链在产品上运行是一个比较新生的技术。在这个范例中到目前为止显示出不会腐败的唯一安全模型就是工作量证明。权益证明的设计空间还非常的大,而且工程学上权衡的理解也远远不够,因为权益证明是一个研究前沿也没有足够的数据。不用多说,要达到一个最佳的PoS共识算法,我们还有很多未来工作需要完成。

Tendermint的一个改进可能是新的提出机制,或者将Tendermint的多轮投票过程压缩成一轮投票。

第二个未来工作的领域可能是利用更高级的加密技术让区块头的签名更小一点。因为我们是通过Cosmos来建立一个“区块链的互联网”,所以将轻客户端证明从一条链上移到另一条链上就是我们的核心工作。从这个观点来看的话,使用更加高级的密码学将区块头的大小减少三十倍或者更多是非常有利的。目前,100验证者,Tendermint的区块头接近4KB,它们都是验证者的签名。我们可以使用高级的加密技术让100个签名从3.2KB减少到64字节。

还有一些优化p2p层的方法,这样我们就可以显著减少点对点需要最终化块的流量。在未来的工作中,不仅仅是压缩区块头中的数据量,还会减少发送到对端的数据量。这样的话,在Cosmos网络初始100个验证者的阈值之上,Tendermint还可以增加更大的验证者集。

转载自:https://ethfans.org/posts/consensus-compare-casper-vs-tendermint

引介 | Ethermint 入门指南

Ethermint 是一个在 Tendermint 上的 Ethereum 优化的产物。将 Ethermint 和 Cosmos Hub 同时发布是为了双方能够促进对方发展:在保证智能合约可编写和执行,同时利用Tendermint引擎提高效率。

Ethermint的主要特性:

  • Web3兼容
  • 高吞吐
  • 横向扩展性强
  • 交易确定性

Cosmos简介

因为以太坊使用的是工作量证明的安全模型,Go Ethereum (Geth)性能很差,也不能提供交易确定性。 使用 Ethermint 不但可以通过 web3 RPC 来部署智能合约,而且操作的速度提升了20倍左右。这得益于区块大小的增长。Geth 的处理速度在 12.5TPS( 每秒交易,transactions per second)。Ethermint 的处理速度在200 TPS,这得益于 Tendermint PoS的确认速度。

Ethermint 相关文档:http://ethermint.readthedocs.io/en/develop/
Ethermint 代码库GitHub:http://github.com/tendermint/ethermint

架构:Hub&Spoke


图解:Cosmos Hub 和 Spoke 架构,每一个空间(Zone)都可以代表一个不同的区块链,也可以是同一条链的多个复制本以实现横向扩展性(Horizontal Scalability)

Tendermint 的核心与应用区块链交互界面(ABCI)

Tendermint 主要由以下两部分组成:区块链共识引擎和上层应用接口。共识引擎称为:Tendermint Core, 它用来保证系统每个节点内交易的顺序是一致的。上层应用接口称为 Application Blockchain Interface (ABCI), 保证交易能被应用处理,不受编程语言的限制。

Tendermint 也可以被用于保证任意应用的状态一致性。它可以作为一个即插即用的共识组件来替代已有的共识引擎。所以,开发人员可以将任意版本的Ethereal代码(Rust,Go,或Haskell),把它当作一个ABCI运行在Tendermint共识引擎之上。这就诞生了一个新的Ethereum 。

另一个例子是 Cosmos network,运用 ABCI&Tendermint Core 实现应用和共识过程的分离。

当我们建立好不同的 zones, 可以使用相应的 Inter-blockchain Communication (IBC)协议进行沟通,实现跨链交互。

主要特性

Web3完全兼容

Ethermint 完全兼容 Ethereum 的 web3 接口和 RPC 调用方法。对于一个已经开发好Ethereum 上的钱包软件的开发者,他很容易将钱包转移到 Ethermint 上运行:只要该改变服务的URL。

开发工具 Truffle 简化了部署智能合约的流程,开发者不需要控制和 Ethereum 节点的交互。若将 Ethereum 节点替换为 Ethermint 节点, 那么你就可以将合约部署在Cosmos上。 这样就实现了合约的交互,花费的时间不超过10秒钟。

吞吐量达到更高的数量级

Tendermint 的 PoS 共识引擎无疑能将大大提高Ethermint 的运行速度,这也是它毫无疑问的优势。建立在容许更高吞吐量的共识引擎之上的效果是使得执行智能合约的成本更低。因为 Tendermint 可以处理速度比 Ethereum 虚拟机(EVM)高20倍,这意味着不会再因为网络缓慢的交易导致费用上涨。 因此,在 Ethermint 中执行一个合约可节省20到50倍的交易费用。

不设限的水平扩展

Ethereum 目前的主要问题之一是可扩展性。 Ethereum 处理速度在12.5 TPS,这就是网络到达瓶颈的地方。 Ethermint 的上限在200 TPS。

但是,假设 Cosmos 上线,网络可达到200 TPS 的上限。 由于模块化的 hub 和 zone 的设计,我们可以轻松地添加第二个 Ethermint zone。也就是说,我们可获得了400 TPS的吞吐量。 再加上两个Ethermint zone,我们得到800 TPS。 这种水平可扩展性的方法是 cosmos 所独有的,它可无限扩展。

实时交易确定性

Bitcoin 和 Ethereum 的 PoW 的共识算法都不会做出“最终”决定,而且在51%的攻击下,理论上过去的块可以被重写。 当没有机会修改过去的块时,块被认为是有“确定性”的。 由于 Nakamoto 协议一致没有提供这样的保证,实际上的共识并不被认为是安全的。

在Ethereum目前的PoW建设中,由于块永远不会“最终化”,您必须等待6个确认,然后才能“确定”您的交易已经进入块状。 通常情况下,Bitcoin 的6次确认大约需要60分钟,而Ethereum 需要2分钟。 在 Ethermint 中,您可以获得 Tendermint 的交易最终确定性,平均在1秒钟内确定块。

Ethermint 的实现

由于Tendermint的共识机制的作用,我们可以即时保证交易的最终性。 在Tendermint中,协商一致的节点首先在对块的内容达成共识之前首先进行多轮投票提案流程。 当这些节点的绝对多数决定一个块时,它们通过状态转换逻辑运行它。 在Ethereum中,共识的过程是相反的,矿工们将交易包含在一个块中,运行状态更新,然后做“计算”来尝试挖掘块。

转载自:https://ethfans.org/posts/a-beginners-guide-to-ethermint