区块链研习社区块链大学数据结构和算法分析

转:Tendermint 简介

2018-11-11  本文已影响0人  编程狂魔

Tendermint 是分布式一致性软件。即使有1/3的机器叛变了, 也能保证其余机器上的数据一致。容忍机器以任意方式失败的能力, 包括变得恶意, 被称为拜占庭容错(BFT)。该理论被提出来数十年了,由于bitcoin和ethereum”区块链技术”的成功,才变得流行起来。区块链用点对点和加密认证技术组成了一个现代化BFT实例。Tendermint包含了两个主要的组件:区块链共识引擎和通用应用层接口。共识引擎叫Tendermint Core,确保每一台机器上的交易列表相同。应用层接口名字是ABCI,提供能为任何语言处理交易的接口。与其他区块链的解决方案(内置的状态机预先打包块)不同,如ethereum的基于世界状态树的键值对存储、bitcoin的脚本语言处理。开发人员可以在任何开发环境下用任何语言通过实现ABCI应用层来复制Tendermint状态机。

共识算法

Tendermint 是一个易于理解的,大部分模块采用异步通信的,拜占庭容错共识协议。该协议可用一个简单的状态机表示,如下图:


Tendermint

协议参加者称为验证节点;他们轮流打包出块并集体对该块打包。在每一个高度上只允许一个块commit。在一个块无法在该轮被提交的情况下,协议会移动到下一轮,并且新的验证节点会propose一个该高度的块。需要两轮投票才能commit一个块;这两轮投票我们称为“pre-vote“ 和 “pre-commit“。在每一轮投票中需要超过2/3的验证节点对同一个块pre-commit才能最后的块commit。
验证者在每一轮中commit块时会失败,原因如:当前提议者可能离线,或者网络可能很慢。Tendermint允许跳过验证者,验证者等待一小段时间从proposer收到完整的proposer块,然后进入下一轮投票。这种对超时的依赖使得Tendermint成为弱同步协议,而不是异步协议。然而,协议的其余部分是异步的,验证者只有收到超过2/3的投票后才能取得进展。precommit和propose两轮投票机制是一样的。
假设有不到三分之一的验证节点是拜占庭节点,Tendermint保证不会违反安全性。也就是说,验证节点永远不会在相同的高度提交冲突的块,不会分叉。为此,它引入了一些“锁定“规则。一旦验证器预先插入一个块,它将被锁定在该块上,然后,

转自:https://gguoss.github.io/2017/06/05/tendermint/

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
上一篇下一篇

猜你喜欢

热点阅读