区块链中文技术社区 - Cross chain-优秀转载
type: channel
link: https://bcskill.com/index.php/category/Cross-chain-优秀转载/
items: 理解以太坊的Layer 2扩容解决方案：状态通道（State Channels）、Plasma 和 Truebit
items: Cosmos钱包管理和离线交易签名工具
items: 科普 | Cosmos 区块链的工作原理，Part-1：比较 Cosmos 与比特币、以太坊
items: 科普 | Cosmos 与 Polkadot 的五大区别
items: 引介 | Cosmos 如何与 Ethereum 相连？
items: 干货 | 共识算法的比较：Casper vs Tendermint
items: 引介 | Ethermint 入门指南
items: 深度剖析区块链跨链技术Cosmos(下篇)
items: 深度剖析区块链跨链技术Cosmos(上篇)

理解以太坊的Layer 2扩容解决方案：状态通道（State Channels）、Plasma 和 Truebit
type: item
date: 2020-12-01T16:27:33+08:00
description: 对于以太坊来说，2018年是专注底层架构之年。今年很多早期参与者会测试网络极限，并且重新关注以太坊的扩容技术。 以太坊仍然处于起步阶段。直到现在，它仍然没有那么安全或者可扩展。对于任何密切关注以太坊技术的人来说，这都是很好理解的。但在过去一年，ICO推动的炒作已经过分夸大了目前的网络能力。以太坊和web3的美好愿景—— 一个安全，易于使用的去中心化网络，由一系列通用的经济协议来约束，并且被数十亿人来使用——这个承诺希望在即，但是只有在关键的底层架构完成的前提下才能实现。 那些正在致力于构建以太坊的底层架构以及扩展其性能的项目通常被称为扩容解决方案。这些方案有很多种形式，并且常常彼此兼容或互补。 在这篇长文中，我想深入探讨某一类扩容解决方案：“链下（off-chain）”或者说“layer 2”解决方案 首先，我们来总体讨论下以太坊（以及所有公链）的扩容挑战。 其次，我们会介绍解决扩容挑战的不同方法，并且会区分“layer 1”和“layer 2”解决方案。 第三，我们会深入研究layer 2解决方案并且解释它是如何工作的——具体来说，我们会讨论状态通道，Plasma和Truebit。 本文的重点是让读者能够对于layer 2解决方案工作原理有一个完整和详细的概念性理解。但是我们不会深入研究代码或特定的实施方案。反之，我们会专注于理解用来构建这些系统的经济机制，还有一些在所有layer 2扩容技术中得以共享的共识。 1. 公链的扩容挑战 首先，重要的是理解“扩容”并不是一个单一的、特定的问题。它指的是一系列以太坊必须要解决的挑战，从而以太坊才能被全球数十亿人使用。 最常讨论的扩容挑战是交易吞吐量问题。目前，以太坊每秒可以处理大约15笔交易，而相比而言Visa的处理能力大约为45,000/tps。在过去一年，一些应用例如以太猫，或者偶发的ICO，都足够火爆，能让以太坊网络“降速”并且会提高交易费用（gas）。 像以太坊这种公链的关键限制在于，每一笔交易都需要被网络中的每一个节点处理。以太坊区块链上的每个操作，一笔交易，以太猫的诞生，部署新的 ERC20 合约，每一个发生在以太坊区块链上的操作都必须由网络中的每个节点并行处理。这是设计理念决定的，它是保证公链权威性的一部分。节点们不用依赖其他节点来告诉它们，区块链的当前状态是什么，它们自己就能搞清楚。 这就从根本上给以太坊网络的交易吞吐量造成了限制：它不能高于我们对单个节点所要求的交易吞吐量。 我们可以让每个节点去承担更多工作。如果我们将区块的大小加倍（也就是区块的gas值限制），也就意味着每个节点处理每个区块的工作量大致是之前的两倍。但是这就带来了影响去中心化的代价问题：节点需要做更多工作意味着低性能的计算机（例如消费级设备）可能会退出以太坊网络，如果算力集中在高性能节点运营者手中，挖矿就变得非常中心化。 所以，我们需要找到让区块链能够在不提高单个节点工作量的情况下，负担更多有用工作的方法。 从概念上来说，有两种方法可以解决这个问题： Ⅰ. 如果每个节点不必并行处理每一项操作会怎么样？ 第一种方法和我们预设的前提不同，如果我们构建一个区块链，其中每个节点不需要都去处理每个操作会怎么样？如果网络被分成两部分，它们还可以半独立的进行操作，又会怎么样？ A部分可以处理一批交易，同时B部分可以处理另一批交易。这样就可以有效地使区块链的交易吞吐量翻倍，因为我们的限制现在能够被两个部分同时处理。如果我们将区块链分为很多不同的部分，那么我们就可以把区块链的吞吐量提高很多倍。 这就是“分片”技术背后的见解，“分片”是由Vitalik的以太坊研究团队和其他社群提出的扩容解决方案。区块链被分成很多部分，它们被称为“分片”，每个分片都可以独立地处理交易。分片通常被称为是“layer 1”扩容解决方案，因为这是在以太坊底层协议上实现的。如果您想了解有关分片的更多内容，我建议您阅读extensive FAQ和这篇博文。 II. 如果在以太坊现有处理交易能力之外去进行更多有效操作会怎么样？ 第二种选择是从反方向进行考虑的：并不是提高以太坊区块链本身的能力，如果我们可以利用已有的能力做更多的事情，会怎么样呢？底层以太坊区块链的吞吐量是相同的，但是实际上我们可以做更多对于人们和应用程序有用的操作，例如交易，游戏中的状态更新，或是简单的计算。 这就是类似状态通道，Plasma和Truebit等“链下”技术背后的见解。当然，这些技术都在解决不同的问题，但它们都是通过“链下”操作，而不是在以太坊区块链上进行操作，同时仍然保证了足够的安全性和不可更改性。 这些也被称为“layer 2”解决方案，因为它们是构建在太坊主链“之上”的。他们不需要更改底层协议，他们只是以基于以太坊的智能合约的形式存在，与链下的软件进行交互。 2…

Cosmos钱包管理和离线交易签名工具
type: item
date: 2020-07-01T11:02:00+08:00
description: github: https://github.com/hukkinj1/cosmospy cosmospy Version 5.0.1 Tools for Cosmos wallet management and offline transaction signing Installing Installing from PyPI repository (https://pypi.org/project/cosmospy): pip install cosmospy Usage Generating a wallet from cosmospy import generate_wallet wallet = generate_wallet() The value assigned to wallet will be a dictionary just like: { "seed": "arch skill acquire abuse frown reject front second album pizza hill slogan guess random wonder benefit industry custom green ill moral daring glow elevator", "derivation_path": "m/44'/118'/0'/0/0", "private_key": b"\xbb\xec^\xf6\xdcg\xe6\xb5\x89\xed\x8cG\x05\x03\xdf0:\xc9\x8b \x85\x8a\x14\x12\xd7\xa6a\x01\xcd\xf8\x88\x93", "public_key": b"\x03h\x1d\xae\xa7\x9eO\x8e\xc5\xff\xa3sAw\xe6\xdd\xc9\xb8b\x06\x0eo\xc5a%z\xe3\xff\x1e\xd2\x8e5\xe7", "address": "cosmos1uuhna3psjqfxnw4msrfzsr0g08yuyfxeht0qfh", } Converter functions Mnemonic seed to private key from cosmospy import seed_to_privkey seed = "teach there dream chase fatigue abandon lava super senior artefact close upgrade" privkey = seed_to_privkey(seed, path="m/44'/118'/0'/0/0") Private key to public key from cosmospy import privkey_to_pubkey privkey = bytes.fromhex("6dcd05d7ac71e09d3cf7da666709ebd59362486ff9e99db0e8bc663570515afa") pubkey = privkey_to_pubkey(privkey) Public key to address from cosmospy import pubkey_to_address pubkey = bytes.fromhex("03e8005aad74da5a053602f86e3151d4f3214937863a11299c960c28d3609c4775") addr = pubkey_to_address(pubkey) Private key to address from cosmospy import privkey_to_address privkey = bytes.fromhex("6dcd05d7ac71e09d3cf7da666709ebd59362486ff9e99db0e8bc663570515afa") addr = privkey_to_address(privkey) Signing transactions from cosmospy import Transaction tx = Transaction( privkey=bytes.fromhex("26d167d549a4b2b66f766b0d3f2bdbe1cd92708818c338ff453abde316a2bd59"), account_num=11335, sequence=0, fee=1000, gas=70000, memo="", chain_id="cosmoshub-3", sync_mode="sync", ) tx.add_transfer(recipient…

科普 | Cosmos 区块链的工作原理，Part-1：比较 Cosmos 与比特币、以太坊
type: item
date: 2019-08-02T15:57:22+08:00
description: 编者注：本文对 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 网络，仅仅需要一些额外的步骤。如果你觉得费解，不用担心——我们将稍后对此进行更深入的研究…

科普 | Cosmos 与 Polkadot 的五大区别
type: item
date: 2019-07-30T16:16:53+08:00
description: 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 和 Kak…

引介 | Cosmos 如何与 Ethereum 相连？
type: item
date: 2019-07-30T14:44:47+08:00
description: 跨链加密货币资产转移是开发团队在 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 个组成部分 以太坊智能合约：将会有一组以太坊智能合约扮演资产保管人的角色，它们能够保管以太坊中的代币和 Cosmos 中的代币。 见证人（Witness）：见证人组件能够证明以太坊中发生的事件。100 个区块（也就是最终性门槛）产生之后，见证人会在不具有最终性的区块链上实现伪最…

干货 | 共识算法的比较：Casper vs Tendermint
type: item
date: 2019-07-29T20:05:19+08:00
description: 权益证明的漫漫长路 权益证明的定义可以查看理解权益证明。 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的验证者解除了绑定，那么他们就可以恶意的创造包含之前验证者集的第二条链，这可能导致任意的交易。 对于权益证明协议这是相当致命的，因为安全模型必然是“主观”的。当参与网络要求大量的社会信息，那么这个安全模型就会被称为是“主观的”。一个新节点加入网络之后，对于当前网络的状态可能会得出不同的结…

引介 | Ethermint 入门指南
type: item
date: 2019-07-29T18:53:15+08:00
description: 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建设中，由于块永远不会“最…

深度剖析区块链跨链技术Cosmos(下篇)
type: item
date: 2019-07-12T16:08:49+08:00
description: 导读 2017年以来，区块链项目出现了井喷式地上升，然而在喜人增长态势的背后，人们也注意到大部分项目都缺乏与其它区块链项目互连互通的能力而成为孤立的网络体系。 因此，跨链技术也逐渐进入了大家的视野，本文将为大家解读一个跨链项目Cosmos，看看它是如何做到让不同区块链的价值网络实现互通的。通过对该项目的解读，让大家对跨链项目有个初步的了解。 同时受限于篇幅，我们会分为上下两篇，上篇让大家了解了Cosmos的核心技术Tendermint，详情可见上篇：深度剖析区块链跨链技术Cosmos(上篇)。此篇将为大家着重介绍Cosmos。 跨链技术背景 随着区块链技术的火热，越来越多的企业和开发人员加入到区块链的浪潮中，市面上也出现了许多不同类型的链，应用在金融、健康医疗、供应链、资产管理和溯源等领域。然而大部分链上应用（加密货币或者智能合约）都无法跨越当前链的边界，不能与其他链协同合作实现价值的流通从而限制了区块链的发挥空间。如何能让不同类型的链协同合作实现价值的流通成了探索的方向，这也是跨链技术的起因。跨链技术是打开链与链之间互通的钥匙，能很好地解决价值孤岛的问题，建立价值网络的桥梁。 目前主流的跨链技术包括： 公证人机制（Notary schemes） 侧链/中继（Side chains/relays） 哈希锁定（Hash-locking） 分布式私钥控制（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的区块链使用…

深度剖析区块链跨链技术Cosmos(上篇)
type: item
date: 2019-07-12T15:00:06+08:00
description: 区块链的公链项目越来越多，每个项目都是一个孤立的网络体系，因此区块链项目之间的互联互通能力也是技术发展的大方向。这其中Cosmos项目是其中的优秀代表。本文作者从Cosmos核心技术Tendermint开始，深度剖析Cosmos项目，让大家对跨链技术将一个比较深入的了解。 导读 2017年以来，区块链项目出现了井喷式地上升，然而在喜人增长态势的背后，人们也注意到大部分项目都缺乏与其它区块链项目互连互通的能力而成为孤立的网络体系。因此，跨链技术也逐渐进入了大家的视野，本文将为大家解读一个跨链项目Cosmos，看看它是如何做到让不同区块链的价值网络实现互通的。通过对该项目的解读，让大家对跨链项目有个初步的了解。同时受限于篇幅，我们会分为上下两篇，上篇带大家先了解Cosmos的核心技术Tendermint，下篇会着重介绍Cosmos。 Tendermint概述 提到区块链，大家想必已然不陌生了，不过更多人想到的可能会是众所周知的Bitcoin和Ethereum。的确，两者分别是区块链技术的起源和发展的代表，也是大家广泛传播和深入研究的对象。但是随着Bitcoin的不断推进，比特币工作量证明共识机制在速度和扩展性上的不足也逐步展现出来。 Cosmos的开发团队Tendermint其实早在2014年就开始意识到了其不足，并持续专注于寻求不依赖挖矿等高电力消耗的共识机制，提供快速的交易处理能力，它们的目标是为全世界所有的区块链提供速度、安全和可扩展性。目前，Tendermint加入了微软Azure区块链即服务平台，也成为了以太坊区块链联盟成员之一，同时Tendermint也是跨链技术Cosmos的核心技术。两者大致的关系如下： 图中可以轻松看出Cosmos就是在Tendermint基础上添加一些插件功能来实现的，上篇暂不对Cosmos做过多阐述，先来认识一下Tendermint。 Tendermint是什么 Tendermint的详细定义可以参考官方文档： https://tendermint.readthedocs.io/en/master/introduction.html#what-is-tendermint 这里总结下有以下几点： Tendermint是一个能够在不同机器上，安全一致复制应用的软件，其中安全性和一致性也是分布式账本的关键概念。 Tendermint具备拜占庭容错能力，是一种拜占庭容错共识算法。 Tendermint主要有两部分组成： Tendermint Core：区块链共识引擎，负责节点之间数据传输以及拜占庭共识。 ABCI：区块链应用程序接口，也是一个协议，支持任何语言的交易处理实现。 总体来讲，Tendermint可以理解为一个模块化的区块链软件框架，支持开发者个性化定制自己的区块链，而又不需要考虑共识以及网络传输的实现。 Tendermint设计原则 先简单说说区块链的概念，区块链是一个具备确定性的状态机，可以在不信任的节点之间进行状态复制，包括应用的状态和改变状态的交易。从架构的层面上，区块链可以简单分为三个概念层： 网络层（Networking）：负责交易和数据传输和同步。 共识算法（Consensus）：负责不同的验证节点处理完交易后，保证状态的一致，也就是将交易打包到区块中。 应用程序（Application）：交易的真正执行者。 大致框架如下： 目前大部分的区块链实现都是采用上面的框架，实现成单一的程序，但是这就很容易出现两个问题： 代码复用困难，代码库的分支管理变得复杂。 限制了应用开发的语言 如何去规避这两个问题呢？Tendermint设计了自己的一套框架，其设计原则是易使用，易理解，高性能，适用于各种分布式应用。它的创新之处在于，将区块链应用（状态）与底层共识进行了分离，将共识引擎和P2P网络层封装组成Tendermint Core。同时提供ABCI接口与应用层进行交互，应用逻辑可以用任何语言编写，应用做的事情实际上就是状态机控制。基于这种架构，应用的开发者可以方便地实现自己的区块链。 Tendermint的框架总体来讲分为ABCI Application以及Tendermint Core两部分，两者通过ABCI连接。下面会对这两部分依次展开介绍 Tendermint核心模块 ABCI Application 开发者定制开发的区块链应用，开发语言不受限制，可以使用任何语言进行开发，但是必须实现为一个ABCI Server，即需要满足以下几点： 是一个Socket Server，需支持TSP或GRPC两种方式之一。 能够处理ABCI Message。所有的ABCI消息类型都是通过protobuf来定义的，具体的消息格式可参考https://github.com/tendermint/abci/…