区块链应用已经从单纯电子现金发展到去中心化投票等更多的领域,但是区块链这样的分布式系统的开发还存在一些困难的问题:安全、可靠性、敏捷度、以及一致性保证等等。Tendermint的目的就是致力于解决分布式系统开发中像公示算法这样的技术难点,而让Tendermint区块链应用开发者可以将关注点集中在业务逻辑上。
Tendermint是跨链Cosmos项目的核心技术。本文主要介绍以下内容: (1)Tendermint的网络层级框架图 (2)Tendermint模块组成及共识算法原理 (3)Tendermint工作流程
何鑫铭,携程技术中心创新研发部区块链技术专家,携程区块链技术平台技术负责人,精通当前主流区块链开源技术框架,热衷于研究区块链底层设计和区块链应用创新。
Tendermint 大体上与两类软件很类似。第一类包含了分布式的键值存储,比如 Zookeeper,etcd 和 consul,它们都使用了非拜占庭容错共识。第二类就是 “区块链技术”,它既包括了像比特币和以太坊这样的加密货币,也包括了像 Hyperledger Burrow 这样的分布式账本设计。
Tendermint是一个开源的完整的区块链实现,可以用于公链或联盟链,其官方定位是面向开发者的区块链共识引擎。tendermint引以为傲的是其共识算法 —— 世界上第一个可以应用于公链的拜占庭容错算法。tendermint曾于2016年国际区块链周获得最具创新奖,并在Hyperledger的雨燕(Burrow) 等诸多产品中被采纳为共识引擎。由于避免了POW机制,tendermint可以实现很高的交易吞吐量。根据官方的说法,在理想的应用数据结构支持下,可以达到42000交易/秒。 在现实环境中,部署在全球的100个节点进行共识沟通,实际可以达到1000交易/秒。
前两周上线了我们为 Cybermiles 提供的 supernode,因为 Cybermiles 主网使用了 Tendermint,于是上周便研究了一下 Tendermint,边学边写了个 slides 介绍 Tendermint。
Tenermint是个能够在多机器上安全一致地复制应用的软件。 安全是指无论多达1/3的机器出现何种类型的故障,Tendermint都可以正常工作。 一致是指每个正确运行的机器都可以获取完全相同的交易日志并计算相同的状态。 在分布式系统中,安全一致地复制至关重要;从货币到选举再到基础设施管理等广泛应用容错方面,它都有着着重要作用。
IOV Weave SDK是一个基于Tendermint共识引擎的区块链开发框架,Weave提供了很多常用功能的预置模块用于你自己的区块链,同时也支持自定义扩展。
tendermint共识算法是拜占庭容错算法,也是最多容忍不超过1/3的恶意节点。协议遵循一个简单的状态机,通过消息事件推动状态的改变。tendermint共识主要有一下几个阶段:NewHeight、NewRound、Propose、Prevote、Precommit、Commit。作为一个BFT类的共识算法。tendermint对应的三阶段分别是Proposal,Prevote,Precommit三个阶段:
让应用程序层 和 共识层进行解耦。可以理解为一套应用程序的接口标准,是应用程序层和共识层进行的桥梁。
工作中我主要参与的是跨链项目的方案架构设计与实现,因为公司既有方案是基于 Cosmos 区块链的,我在一年多的项目中基于 Cosmos SDK 作了一些底层链开发改造,对其技术实现有了一些了解,但由于开发周期比较赶,一直没能对 Cosmos 的架构设计与 Tendermint 共识机制有一个系统的了解。
Tendermint RPC API文档中文版由汇智网翻译整理,访问地址:http://cw.hubwiz.com/card/c/tendermint-rpc-api/。
对 Tendermint 有了一个的了解之后,我们需要对 Tendermint 进行开发和操作,该如何运行这个项目。 Tendermint 使用的是 cobra 这个命令行框架,需要对 cobra 有一定的了解。
Tenermint 是一个软件,用于在多台机器安全一致地复制一个应用。所谓安全,指的是即使有多达 1/3 的机器出现任意故障的情况下, Tendermint 仍然能够正常工作。所谓一致,指的是每一个正常工作的机器都会有着同样的交易日志,计算相同的状态。安全一致的复制是分布式系统中一个至关重要的问题:从货币到选举,到基础设施规划,它在广泛应用的容错中承担了一个极其重要的角色。
这项技术深入研究由Chjango Unchained编写。本文比较了不同的共识系统,它们为EOS和Tendermint提供了关于每种基础技术以及它们有什么样的独特地类似证明(PoS)能力。
本文从技术角度全面了解 Cosmos 项目, Tendermint 是什么,Cosmos SDK 要解决什么,如何进行跨链,如何解决扩展性问题。
摘要:比特币的诞生给我们带来了一个可以自运转网络的成功范例。通过共识算法、加密、点对点网络以及奖励机制等,可以形成一个自治的社区,可以形成一个通过挖矿机制(POW)来达成一种不通过中心机构来达成的信任,最终实现点对点的价值流通。
Tendermint 是一个易于理解,大部分操作为异步的 BFT 共识协议。下图是一个简单的状态机,它展示了协议遵循的规则:
BlockChain的轻客户端概念初始源于bitcoin网络,为了在计算资源受限的设备上,也可以验证一笔交易的合法性,研究人员提出了轻客户端的设想;即资源受限的设备上,只存储必要的链上信息,当验证一笔交易的有真实性时,使用密码学证明来为该交易做担保。
DolphinChain 是由玄猫安全实验室维护的区块链应用靶机,旨在教授区块链应用程序安全课程。您可以使用 DolphinChain 进行安装和练习。
区块链应用接口(Application BlockChain Interface,ABCI)允许应用的拜占庭容错复制可以由任意一种编程语言编写。
但是这么好的平台呢,速度却太慢(原因略),每当 clone,push,访问都是一件很头痛的事情,本文总结 9 种方法,解决烦恼。
假如时间倒退4,5年前,如果有人跟你说他要做一个区块链的互联网,让市面上所有的公链互联互通。你一定觉得他疯了。因为那个时候公链就没有几个,大家谈来谈去还是比特币,以太坊等这些公链。这个时候搞公链的互联互通确实没有什么意义。
最近,和同事一起做了个绘图小站,刚刚起步,虽然只有两个图的画图功能,可能还存在bug,欢迎试用反馈呀!本着先上线,小步迭代的思想,决定把这个小站公布下,希望能坚持做下去。建站的方法比较简单,之前已经搭建好的lamp,外加上shiny server,使用shiny解决的啦,基于基本没有前端基础,审美也一般情况,于是就采用了一个还算美观的模块,把shiny App嵌入其中实现的,只是为了掩饰App的丑。估计小站没有什么流量,就用了自己搭建博客的小站,性能一般,画图应该几秒可以出来的,不过网页加载有点慢,请轻拍砖。如果有更多个性化绘图需求,请联系我们。
Cosmos项目有个宏伟的目标,就是在DPOS+BFT的共识引擎的基础上,能够实现区块链开发简便,互通互联。本文介绍以下内容: (1)Cosmos架构 (2)Cosmos Hub (3)Cosmos SDK (4)IBC协议 (5)PegZone
基于 Tendermint 开发的链都可以采用同构跨链,cosmos 中同构链之间进行资产转移的原理如下。由于 Tendermint 采用 PBFT+POS 共识算法,每个区块都是经过全网 ⅔ 节点签名过的,所以得到 Validator 信息就可以通过对区块头进行校验来验证这个区块头是不是某一个链中的合法区块。ChainA,ChainB 都是用 Tendermint 开发的链,现在 ChainA,ChainB 之间需要进行跨链资产转移,第一步A,B 两个链之间会相互进行注册,在注册的过程中,A,B 两个链会将各自的创世区块以及 ChainID(用于表示不同链)发送给对方,由于创世区块中含有 Validator 信息,所以通过注册后 A,B 两个链会有对方链的 Validator 信息,以及区块头信息。现在 A 中的资产需要向 B 中转移,首先发送一个跨链交易 packageTx 到 A 中,A 执行这个 packageTx,将相关的资产进行销毁或锁定,接下来将 packageTx 写入 egress 中,egress 可以看成是一个信箱,所有向外部通知的跨链交易的都放入到egress 中。为了将 A 链中发生的事件通知给 B 链,需要一个relayer,relayer是一个中继程序负责将 A 链中 egress 中的跨链消息转发给 B 链,relayer查询 A 链中 egress 中的packageTx,并获取packageTx的Merkle Proof,将这些信息打包成 IBCPacketPostTx 交易发送到 B 链上,并查询 packageTx 所在的区块头信息,将区块头信息打包成 IBCUpdateChainTx 发送到 B 链上, 注意这里 relayer 是需要支付 IBCPacketPostTx,IBCUpdateChainTx 执行的交易费用的。B 链接收到 IBCPacketPostTx 交易后开始执行,首先通过 A 链中的 Validator 校验IBCUpdateChainTx 中的区块头是否是 A 链的,然后校验 IBCPacketPostTx 中跨链交易的Merkle proof 是否等于 IBCUpdateChainTx 中的区块头 hash。当所有校验全部通过时 B 链开始执行相关操作(在B链是生成相关资产等)[图片上传中...(image-b92935-1570973105363-3)]
熊势之下,哀鸿遍野,看看各个官方群、电报群,看空者多,币圈完全是股市的放大版,人心更浮躁,期望更高摔的更重,毕竟很多人的期望是百倍、是千倍、甚至更高。立秋已过,希望接下去飒爽的秋风多带走人心的不安吧,每天看群也是好玩至甚,今天要为大家介绍的项目OneLedger也难免如此,不过作为技术人员,我们还是看看技术面吧,技术群里无所谓涨跌,只关心项目进度与创新,算是一股清流吧。
不同的区块链智能合约和区块链技术现在风靡一时。越来越多的人出于某种原因试图进入这个神奇的世界。如果你是这项技术的新手并正在寻找基于区块链的开发平台的快速入门,那么本指南非常适合你。我们将重点关注和比较的平台是:
汇集最新实战区块链课程包括比特币、以太坊、EOS、Hyperledger Fabric、Tendermint,开发语言覆盖java、php、c#、node、go、c++,一对一在线答疑。区块链课程中既有面向初学者的内容如核心概念、区块链交互,也有核心应用如交易、转账、钱包、代币发行等。是不是很激动?赶紧去看看吧。
Proof of Stake -- 公有链的一类共识算法,基于验证人(validator)在网络中的经济权益(economic stake)。
应用层:兼容以太坊智能合约,支持发行代币、资产交易、钱包找回,hash锁定等原生能力,同时支持用户可扩展执行器(合约)。共识层:共识算法可插拔,支持POS及DPOS的公链共识、Tendermint及pbft联盟链共识、Raft私链共识、平行链共识等。数据层:数据存储方式支持可扩展,目前支持MPT、MAVL、KVDB、MVCCKVDB多种方式。
从技术层面来说,目前区块链发展的最大制约因素在于底层技术存在着很严峻的技术瓶颈(吞吐量,安全性,兼容性等)。这些问题尚未得到很好的突破,因此大部分的应用都无法落地,所有的Dapp项目或者周边生态需要在公链的基础上才能有价值。
在本文中我们将学习如何使用使用coinmarketcap提供的比特币行情API,编写Python程序来获取像比特币、莱特币或以太币之类的区块链数字货币的实时行情/实时价格。
在本文中,我们尝试从零开始设计一个拜占庭容错的共识算法。但由于本文是在阅读大量文献之后,思考整理得出的,难免会有“事后诸葛亮”的嫌疑,但这不要紧,我们的目的也不是真的为了设计一个全新的共识算法,而是站在设计者的角度,思考一个共识算法是如何一步步得出的。当然,在推理过程中,我们也会使用尽可能少的已知条件,让“从零开始”不那么“哗众取宠”。相信本文会让你对共识算法有一个较为全面的理解,以后如果遇到新的共识算法,也可以使用本文的思路分析,快速拿下。
chainx.org chainx 文章归档: Polkadot Polkadot(波卡链):畅想一种异构的多链架构(第1,2,3章) Polkadot(波卡链):畅想一种异构的多链架构(第4,5章) Polkadot(波卡链):畅想一种异构的多链架构(第6.1~6.5章) Polkadot(波卡链):畅想一种异构的多链架构(第6.6~6.8章) Polkadot(波卡链):畅想一种异构的多链架构(第7,8章) Polkadot类似于区块链世界的中国电信 Vitalik给R3提供的跨链技术报告 ETHLDN
一个语言是否成熟的语言,一个重要的标志就是开发过非常大型的系统。云计算领域的两个核心系统docker和k8s都是用go语言开发的。目前大部分区块链系统也是选择用go语言开发,可以说,要做区块链,go语言是必须要学的一种语言。
Tendermint 的启动流程比较清析明了,各业务启动流程都在对应的实现代码,主启动流程加载所需配置,由各启动实现类启动自己对应业务,如节点启动相关在 nodeImpl,共识相关处理是 state 中进行处理。
本文中,我们会展示OneLedger MVP的演示视频。在视频中,我们展示了如何设置和初始化OneLedger本地测试网,注册身份并在我们的区块链上发布交易。
系统特点 一个语言是否成熟的语言,一个重要的标志就是开发过非常大型的系统。云计算领域的两个核心系统docker和k8s都是用go语言开发的。目前大部分区块链系统也是选择用go语言开发,可以说,要做区块链,go语言是必须要学的一种语言。 开发人员数量 一个语言的入门成本比较低,但是要精通类库和最佳实践,必须要经过数年的学习时间。所以非常小众的语言肯定不在考虑在内,目前go语言在全世界多如牛毛的语言中排行第十名,受到较多的开发者肯定。 语言的工程特性 Go语言在设计的时候,就考虑到了工程实践的问题,一个问题的解决方案基本上都只有一种写法,甚至只是把if写成这样都是非法的。go 提供了gofmt,会自动格式化代码,这样每个人写出的代码风格都非常一致,互相交流起来就不会有障碍。 面向大部分普通程序员 选择go语言的一个很重要的原因,就是一个中等水平的程序员,就能写出非常不错的go代码。这主要的原因还是go语言非常简单,特性非常的少,官方类库又非常丰富,大部分程序员都可以非常容易的上手开发。 高度模块化,遵循 KISS原则的设计:可插拔,易升级 Chain33的模块化设计,在对区块链的底层架构、应用开发的不同功能和需求进行分析的基础上,划分并设计出一系列功能模块,通过模块的选择和组合可以构成不同的产品,以满足市场的不同需求。 开发一个软件其实是一个不断迭代进化的过程,Chain33因此采用“从混沌走向秩序的开发模式”,方便开发者随时调整和扩充。此外,有些开发者可能会在开发过程中发现,有些比较特殊的业务逻辑,需要专门定制某些模块来配合这个业务逻辑。 从迭代和重构、以及系统的可拓展性等角度考虑,Chain33将区块链的底层架构、不同应用开发的功能和需求纳入考量,将系统进行了模块化设计。包括 mempool的排队方式,加密签名的方式,共识的模式,RPC的函数,命令行的命令,钱包的内在逻辑,数据库存储的方式等等,区块链核心的所有模块都可以定制。 采用模块化的设计,这就好比用积木搭建一个机器人,手脚等身体各部分都按照类别放置,可以根据自己的意愿选择组装。在Chain33中,为大家提供了共识、加密和储存等多种模块,开发者在Chain33提供的架构下,可自由组合应用,开发简易,因此仅需基础的编程能力,即可打造一条公链,无需耗费大量成本自己开发区块链底层。
本文着重从区块链的基本概念、运行机制、相关技术和开源项目及工具四个方面进行介绍。 作者 | 卿苏德 区块链(BlockChain),是区块(Block)和链(Chain)的直译,其数据结构如图1所示,
Tendermint的共识算法可以看成是POS+BFT,Tendermint在进行BFT共识算法确认区块前,首先使用POS算法从Validators中选举出Proposer。 然后由Proposer进行提案,最后使用BFT算法生成区块。Tendermint 的共识协议使用的gossip协议。
自从9月份北京黑客马拉松成功举办后,不少朋友希望我们能把团队内部平时举办的 BBL 分享出来,我们觉得这个建议不错,随即开启了 ArcBlock Technical Learning Series,目前已经分享了八个主题,涵盖数据处理和分析,区块链技术,软件开发设计等内容。我们希望通过分享技术主题,即让感兴趣的朋友们收益,大家互相切磋,又能锻炼我们的工程师对知识的归纳和总结的能力 —— 因为,学会一件事情是一回事,能够把所学内容总结并传授出去,是另一回事。在这个过程中,我们学到了很多,也收到了很多反馈。最有意思的是,虽然区块链已经大热了一年多,很多技术群体对它的认知还停留在去中心化,加密货币,以及对智能合约的浅显理解上。所以,我们 ArcBlock 技术团队觉得有必要协力打造一个完整的区块链技术指南,从概念,原理,以及应用几个层次完整阐释我们对区块链技术的理解。目前的大纲如下:
最好的PHP加密货币市场价格实时脚本script集。这些脚本显示实时报价,交易,历史图表,加密交易和超过2000种加密货币通过PHP和JavaScript进行交易。
2017年是加密货币热潮令人难忘的一年。从那时起到现在世界没有任何改变,但今天我们对加密货币仍然很兴奋。乐观主义者认为,比特币将从根本上改变世界各地的支付,经济甚至政治。最乐观的支持者甚至开始抵押他们的房子以购买比特币。悲观主义者声称比特币是一个泡沫,不可避免地会遭遇崩盘。无论比特币发生什么,支持加密货币的技术仍将是真正的结构转型,可能会像20年前的互联网成为影响这个世界的发展一种方式。
复杂美Chain33开发语言,系统特点 一个语言是否成熟的语言,一个重要的标志就是开发过非常大型的系统。云计算领域的两个核心系统docker和k8s都是用go语言开发的。目前大部分区块链系统也是选择用go语言开发,可以说,要做区块链,go语言是必须要学的一种语言。 开发人员数量 一个语言的入门成本比较低,但是要精通类库和最佳实践,必须要经过数年的学习时间。所以非常小众的语言肯定不在考虑在内,目前go语言在全世界多如牛毛的语言中排行第十名,受到较多的开发者肯定。 语言的工程特性 Go语言在设计的时候,就考虑到了工程实践的问题,一个问题的解决方案基本上都只有一种写法,甚至只是把if写成这样都是非法的。go 提供了gofmt,会自动格式化代码,这样每个人写出的代码风格都非常一致,互相交流起来就不会有障碍。 面向大部分普通程序员 选择go语言的一个很重要的原因,就是一个中等水平的程序员,就能写出非常不错的go代码。这主要的原因还是go语言非常简单,特性非常的少,官方类库又非常丰富,大部分程序员都可以非常容易的上手开发。 高度模块化,遵循 KISS原则的设计:可插拔,易升级 Chain33的模块化设计,在对区块链的底层架构、应用开发的不同功能和需求进行分析的基础上,划分并设计出一系列功能模块,通过模块的选择和组合可以构成不同的产品,以满足市场的不同需求。 开发一个软件其实是一个不断迭代进化的过程,Chain33因此采用“从混沌走向秩序的开发模式”,方便开发者随时调整和扩充。此外,有些开发者可能会在开发过程中发现,有些比较特殊的业务逻辑,需要专门定制某些模块来配合这个业务逻辑。 从迭代和重构、以及系统的可拓展性等角度考虑,Chain33将区块链的底层架构、不同应用开发的功能和需求纳入考量,将系统进行了模块化设计。包括 mempool的排队方式,加密签名的方式,共识的模式,RPC的函数,命令行的命令,钱包的内在逻辑,数据库存储的方式等等,区块链核心的所有模块都可以定制。 采用模块化的设计,这就好比用积木搭建一个机器人,手脚等身体各部分都按照类别放置,可以根据自己的意愿选择组装。在Chain33中,为大家提供了共识、加密和储存等多种模块,开发者在Chain33提供的架构下,可自由组合应用,开发简易,因此仅需基础的编程能力,即可打造一条公链,无需耗费大量成本自己开发区块链底层。
系统特点 一个语言是否成熟的语言,一个重要的标志就是开发过非常大型的系统。云计算领域的两个核心系统docker和k8s都是用go语言开发的。目前大部分区块链系统也是选择用go语言开发,可以说,要做区块链,go语言是必须要学的一种语言。 开发人员数量 一个语言的入门成本比较低,但是要精通类库和最佳实践,必须要经过数年的学习时间。所以非常小众的语言肯定不在考虑在内,目前go语言在全世界多如牛毛的语言中排行第十名,受到较多的开发者肯定。 语言的工程特性 Go语言在设计的时候,就考虑到了工程实践的问题,一个问题的解决方案基本上都只有一种写法,甚至只是把if写成这样都是非法的。go 提供了gofmt,会自动格式化代码,这样每个人写出的代码风格都非常一致,互相交流起来就不会有障碍。 面向大部分普通程序员 选择go语言的一个很重要的原因,就是一个中等水平的程序员,就能写出非常不错的go代码。这主要的原因还是go语言非常简单,特性非常的少,官方类库又非常丰富,大部分程序员都可以非常容易的上手开发。 高度模块化,遵循 KISS原则的设计:可插拔,易升级 Chain33的模块化设计,在对区块链的底层架构
目前各类区块链项目大多是在自己的孤岛上单独存在,而跨链(Cross-chain Atomic Exchange)技术可以把这些孤岛连接起来。因此,跨链将是区块链的下一个杀手级应用。
bitcoin客户端是接入比特币网络的必备软件,也是开发者构建基于比特币区块链的去中心化应用的基础平台。本文将介绍主流的五种bitcoin客户端软件,开发者可以根据自己的需求进行选择。
2019年,互联网无处不在。我们的手机是智能的,我们的合同、手表和汽车也都是智能的。
领取专属 10元无门槛券
手把手带您无忧上云