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

引介 | 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

测试如何用Cosmos创建并交易通证

安装go环境

下载并安装go

https://golang.org/dl/

wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz // 下载
tar -C $HOME -xzf go$VERSION.$OS-$ARCH.tar.gz // 解压到home/go

配置环境变量

mkdir -p $HOME/go/bin
echo "export GOPATH=$HOME/go" >> ~/.bash_profile
echo "export GOBIN=$GOPATH/bin" >> ~/.bash_profile
echo "export PATH=$PATH:$GOBIN" >> ~/.bash_profile
source ~/.bash_profile

安装cosmos

先解决墙内问题

一键解决 go get golang.org/x 包失败

https://shockerli.net/post/go-get-golang-org-x-solution/

export GO111MODULE=on
export GOPROXY=https://goproxy.io
// Go version >= 1.11

下载代码并编译

mkdir -p $GOPATH/src/github.com/cosmos
cd $GOPATH/src/github.com/cosmos
git clone https://github.com/cosmos/cosmos-sdk
cd cosmos-sdk && git checkout v0.35.0
make tools install

那将安装gaiad和gaiacli二进制文件。验证一切正常:

gaiad version --long
gaiacli version --long

安装jq

sudo apt-get install jq

开始配置

设置新节点

gaiad init <your_custom_moniker> // 注意Monikers只能包含ASCII字符。使用Unicode字符将使您的节点无法访问。

您可以moniker稍后在~/.gaiad/config/config.toml文件中进行编辑:

# A custom human readable name for this node
moniker = "<your_custom_moniker>"

您可以编辑该~/.gaiad/config/gaiad.toml文件以启用反垃圾邮件机制并拒绝低于最低汽油价格的传入交易:

# This is a TOML config file.
# For more information, see https://github.com/toml-lang/toml

##### main base config options #####

# The minimum gas prices a validator is willing to accept for processing a
# transaction. A transaction's fees must meet the minimum of any denomination
# specified in this config (e.g. 10uatom).

minimum-gas-prices = ""

您的完整节点已初始化!

创建Genesis文件并启动网络

# You can run all of these commands from your home directory
cd $HOME

# Initialize the genesis.json file that will help you to bootstrap the network
gaiad init --chain-id=testing testing

# Create a key to hold your validator account
gaiacli keys add validator

# Add that key into the genesis.app_state.accounts array in the genesis file
# NOTE: this command lets you set the number of coins. Make sure this account has some coins
# with the genesis.app_state.staking.params.bond_denom denom, the default is staking
gaiad add-genesis-account $(gaiacli keys show validator -a) 1000000000stake,1000000000validatortoken

# Generate the transaction that creates your validator
gaiad gentx --name validator

# Add the generated bonding transaction to the genesis file
gaiad collect-gentxs

# Now its safe to start `gaiad`
gaiad start

此设置将所有数据gaiad放入~/.gaiad。您可以检查您创建的创世纪文件~/.gaiad/config/genesis.json。使用此配置gaiacli也可以使用并且具有令牌帐户(包括放样和自定义)。

参考

https://www.jianshu.com/p/38736bdc08d8
https://cosmos.network/docs/cosmos-hub/installation.html#install-gaia
https://github.com/cosmos/cosmos-sdk/issues/4634

深度剖析区块链跨链技术Cosmos(下篇)

导读

2017年以来,区块链项目出现了井喷式地上升,然而在喜人增长态势的背后,人们也注意到大部分项目都缺乏与其它区块链项目互连互通的能力而成为孤立的网络体系。

因此,跨链技术也逐渐进入了大家的视野,本文将为大家解读一个跨链项目Cosmos,看看它是如何做到让不同区块链的价值网络实现互通的。通过对该项目的解读,让大家对跨链项目有个初步的了解。

同时受限于篇幅,我们会分为上下两篇,上篇让大家了解了Cosmos的核心技术Tendermint,详情可见上篇:深度剖析区块链跨链技术Cosmos(上篇)。此篇将为大家着重介绍Cosmos。

跨链技术背景

随着区块链技术的火热,越来越多的企业和开发人员加入到区块链的浪潮中,市面上也出现了许多不同类型的链,应用在金融、健康医疗、供应链、资产管理和溯源等领域。然而大部分链上应用(加密货币或者智能合约)都无法跨越当前链的边界,不能与其他链协同合作实现价值的流通从而限制了区块链的发挥空间。如何能让不同类型的链协同合作实现价值的流通成了探索的方向,这也是跨链技术的起因。跨链技术是打开链与链之间互通的钥匙,能很好地解决价值孤岛的问题,建立价值网络的桥梁。

目前主流的跨链技术包括:

  1. 公证人机制(Notary schemes)
  2. 侧链/中继(Side chains/relays)
  3. 哈希锁定(Hash-locking)
  4. 分布式私钥控制(Distributed private key control)

而本文所要介绍的主角Cosmos就是中继技术的一个典型案例,接下来将逐步为大家揭开Cosmos的面纱。

Cosmos概述

Cosmos是Tendermint团队推出的一个支持跨链交互的异构网络,它最终的目标是创建一个区块链互联网,允许大量自主且易开发的区块链互相扩展和交互。基于Tendermint开发,采用的Tendermint共识算法,是一个类似实用拜占庭容错共识引擎,具有高性能、一致性、具备拜占庭容错等特点。关于Tendermint的详细介绍可以参考本文上篇:深度剖析区块链跨链技术Cosmos(上篇)

Cosmos网络由许多独立的并行区块链组成,网络中第一个区块链是Cosmos Hub,其他的并行链称为Zone,通过跨链协议(IBC)与Hub进行跨链操作。

目前Cosmos Hub已经经过了多个版本的迭代,MVP版本也趋于完成,同时测试网络也在前不久更新到gaia-7001,但主网的上线时间团队还未给出,所以对Cosmos感兴趣的朋友还需要一些耐心。

Cosmos架构

从Github上可以看出Cosmos主要的代码是cosmos-sdk,它包含Cosmos Hub的程序代码,同时也是一个区块链开发框架,为其他区块链开发者提供一些通用的功能模块,比如:共识,P2P网络,IBC,账户,治理,认证等。大致框架如下:

不难看出cosmos-sdk其实就是一个ABCI应用。主要有:

  • baseapp:定义了一个基本ABCI应用的模版,与Tendermint通信。开发者也可以根据自己的需求重写。
  • 应用程序:包括gaia、basecoin、democoin。其中gaia就是hub主程序,basecoin以及democoin是提供的两个示例应用。
  • plugins:cosmos-sdk的基本单元,每个plugin都是baseapp的功能扩展,包含各自的消息和交易处理逻辑。目前SDK已经集成了一些重要的
    • staking:POS相关的实现,包括:绑定,解绑,通货膨胀,费用等操作。
    • ibc:跨链协议IBC的实现,也是Cosmos支持跨链的主要插件。
    • governance:治理相关的实现,如提议、投票等。
    • auth:定义了一个标准的多资产账户结构(BaseAccount),开发者可以直接嵌入自己的账户体系中。
    • bank:定义资产的转移。

因此基于cosmos-sdk框架,利用其插件功能,可以非常快速的开发出属于自己应用的区块链,同时也可以很方便的加入Cosmos生态网络,支持不同链之间的互操作,在插件的设计上和EOS也有异曲同工之妙。

那么如何使用这些插件功能呢?可以参考cosmos-sdk提供的示例应用,以basecoin为例,只需要几步:

  • 创建自己的ABCI应用,可以嵌入baseapp,也可以重载baseapp。
  • 定义自己的账户体系,可以嵌入BaseAccount。
  • 选择所需要的插件,注册到消息路由。

Cosmos跨链

Tendermint团队在15年就开始考虑跨链技术,跨链也是Cosmos网络最重要的一个特性。一般来说,实现跨链需要做到:

  • 共识算法需要具备及时最终性,也就是说在出块之后,需要能够快速确认为不可逆(固定不变)。
  • 交易确认需要高效独立的证明方法,目前的做法都是基于Merkle证明。

基于cosmos-sdk的区块链使用了Tendermint共识算法就非常容易能够做到。除此之外,Cosmos的区块链间通信协议(IBC)将不同区块链连接起来,达到价值转移的目的。

IBC协议

IBC协议是针对Cosmos网络设计的,依赖其及时最终性的特点,用于Hub与Zone之间消息传递。IBC协议中设计了两个消息:

  • IBCBlockCommitTx:发送方所在区块链的最新的区块信息。
  • IBCPacketTx:跨链交易本身的信息,及其在发送方链中被打包的区块信息。

但有了消息的传递,接收链如何校验信任消息呢?
在IBC协议设计里,两个链建立连接之前需要进行彼此注册,有两个作用:

  • 保存对方链验证者集合以及Merkle证明的算法,这样接收链才能确保消息的正确性和来源的可靠性。
  • 为对方链创建两个可靠队列,一个队列存放所有发送对方链的消息(outgoing),一个队列存放来自对方链的消息(incoming)。

我们以chain1中用户User A转100mycoin 给test-hub用户User B为例看看IBC整个的工作流程如下(基于目前IBC实现代码):

整个工作流程可以分为三个阶段:

  • User A向chain1提交跨链交易,chain1执行该交易,并将交易存入outgoing队列。
  • relayer从chain1中对应test-hub的outgoing消息队列取出跨链交易,提交到test-hub。
  • test-hub执行交易,放入incoming消息队列。

大家可以看到,整个流程比较简单,而且涉及的消息只有IBCPacket。目前Cosmos跨链实现并没有全部完成,只是完成了一个简单的交易处理流程。

PegZone

基于cosmos-sdk开发的区块链能够轻松满足实时最终性,然而现存的Bitcoin和Ethereum这类使用POW共识的区块链并不具备此特点,只能属于概率最终性,无法防止区块链的回滚。对于这类链,团队采用PegZone方案来解决。

PegZone本身其实是一条代理链,实时跟踪原始链的状态,通过设定一个安全阀值,等待原始链区块增长数达到安全阀值时就认为原始链的状态达到了伪实时最终性(回滚概率小),这点和轻客户端钱包验证是相同的原理,例如比特币安全阀值通常设置为6,以太坊安全阀值可以设置为20或者100。而PegZone本身具备实时最终性,就可以通过IBC与Hub相连,从而实现跨链。

接下来还是用例子来说明下,以Ethereum为例来看,有兴趣的朋友可参考Github上的cosmos/Peggy项目。示意图如下:

上图我们可以看出PegZone可以分为5个部分:

  • Smart Contract:资产托管的角色,保管以太坊中的代币和Cosmos中的代币。主要提供了lock、unlock、mint、burn四个方法。
  • Witness:是一个以太坊全节点,监听以太坊合约的event,并等待100个区块产生后,封装WitnessTx提交到PegZone中来证明在以太坊内状态更改。
  • PegZone:PegZone是基于Tendermint的区块链,负责维护用户的账户信息,允许用户之间资产的转移,并提供交易查询。
  • Signer:使用secp256k1对交易进行签名,以便签名能够高效的被智能合约验证,对应于智能合约的校验者公钥集合。
  • Relayer: 中继器负责交易转发。将所有Signer签名后的SignTx转发到smart contract中。

现状

跨链是Cosmos的重要特性,但在从目前的代码实现上感觉有些遗憾:

  • IBC协议目前只完成了基本消息的传递功能,并没有安全校验、注册机制以及一些异常的处理。
  • PegZone机制处于暂停状态,机制设计上团队也称处于实验性质。
  • 对于没有基于cosmos-sdk开发,但符合实时最终性的链无法使用IBC,无法做到异构链的兼容。它们可能使用不同的:
  • 签名算法
  • 序列化方法
  • Merkle证明的方式

总结

通过上下两篇文章,从架构,核心技术——Tendermint、跨链、源码以及现状等方面对Cosmos进行了详细介绍。整体来讲,Cosmos更偏向于一个区块链开发框架,让开发者可以只需要专注于自身业务而不需要考虑区块链底层技术实现,所以在架构设计上采用了灵巧的插件设计,开发者可以按需使用。

Cosmos跨链协议部分从代码上看,完成度还不太高,有些遗憾。并且设计上跨链交易都需要通过Cosmos Hub,这样会过于依赖Hub,对Hub本身的承载压力是个考验,目前其他的一些跨链实现方案也都需要依赖自身的一条链,都会存在这个问题。笔者觉得跨链未来会发展成标准化协议,就像TCP之于互联网,而不是依赖某条具体链,通过定义标准化的模块,通过路由将跨链交易转到目标链,目标链完成对原始链的校验后,确认交易合法性,并执行交易。设想示意图如下:

转载自:https://mp.weixin.qq.com/s?__biz=MzUyMjg0MzIxMA==&mid=2247483744&idx=1&sn=02baaff744429c37626dc89aed14988f&chksm=f9c4e445ceb36d53578bd8c22af2ea14023be0b787a4d980702ed0246a02a1229296e0fe53c1&scene=0