tendermint简介及开发环境的搭建
本篇内容主要讲解"tendermint简介及开发环境的搭建",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"tendermint简介及开发环境的搭建"吧!
Tendermint简介
Tendermint萌芽于比特币、以太坊这样的加密货币,它的目标是提供一个比比特币的工作量证明(PoW)更加高效和安全的共识算法。简单地说,Tendermint是一个可供二次开发的软件包,可以在多台机器上安全、一致地实现应用状态的复制。
Tendermint可以在不超过1/3的机器失效时依然正常工作,无论失效的原因 是什么。Tendermint实现了拜占庭容错。
任何正常工作的机器都会收到相同的交易日志,并分别推导出相同的状态
Tendermint的特性如下图所示:
Tendermint包含两个主要的组件:
区块链共识引擎,即:Tendermint内核
应用与区块链接口,即:Application BlockChain Interface
Tendermint内核可以托管任意的应用状态,因此可以使用任何语言开发区块链软件:Haskell、GoLang、或者Rust都可以用来开发ABCI应用。
其他区块链的一个问题是,它们都是单体设计思维的软件。以比特币为例,比特币的设计就是单体的,其区块链技术栈都包含在单一程序里,需要处理从P2P链接到交易广播、达成共识乃至检查账户余额的一切事情。
单体应用通常不容易扩展、升级或再利用,而Tendermint则致力于将区块链技术栈的两个核心组件与其他部分解耦:共识引擎和P2P连接 -- 事实上这也是开发区块链的最困难的两个技术环节 -- 从而可以使用任何开发语言来开发ABCI应用。
废话不多说了,让我们撸起袖子开干!
Tendermint开发环境搭建与测试
STEP 1:下载Tendermint内核
tendermint内核采用Go开发,有官方预编译程序,下载地址:Tendermint Core。
下载后直接解压,并将tendermint程序目录添加到环境变量PATH的设置里。
STEP 2:初始化Tendermint
执行如下命令初始化Tendermint:
~$ tendermint init
应当可以在终端看到tendermint的输出信息:
I[10-18|20:14:08.996] Generated private validator module=main path=/Users/niharikasingh/.tendermint/config/priv_validator.jsonI[10-18|20:14:08.996] Generated node key module=main path=/Users/niharikasingh/.tendermint/config/node_key.jsonI[10-18|20:14:08.996] Generated genesis file module=main path=/Users/niharikasingh/.tendermint/config/genesis.json
STEP 3:启动Tendermint节点
使用node子命令启动Tendermint节点:
~$ tendermint node -proxy_app=kvstore
-proxy_app
运行标志用来指定一个内置的ABCI应用,例如kvstore是tendermint程序内置的键值对状态机。你应该可以看到如下的tendermint程序输出:
I[10-18|20:16:40.037] Starting multiAppConn module=proxy impl=multiAppConn...I[10-18|20:16:42.051] enterPropose: Our turn to propose module=consensus height=2 round=0 proposer=601302EBD1F8B4BCE9F99B219965F2796AB6BB10 privValidator="PrivValidator{601302EBD1F8B4BCE9F99B219965F2796AB6BB10 LH:1, LR:0, LS:3}"I[10-18|20:16:42.055] Signed proposal module=consensus height=2 round=0 proposal="Proposal{2/0 1:48B45F4423A5 (-1,:0:000000000000) F52DF1F111D8 @ 2018-10-18T14:46:42.051967933Z}"I[10-18|20:16:42.056] Received proposal module=consensus proposal="Proposal{2/0 1:48B45F4423A5 (-1,
STEP 4:提交交易
要提交一个交易,可以使用curl向Tendermint节点的RPC服务发出请求,例如:
~$ curl http://localhost:26657/broadcast_tx_commit?tx=\"niharika\"
响应结果如下:
{ "jsonrpc":"2.0", "id": "", "result": { "check_tx": { "gasWanted": "1" }, "deliver_tx": { "tags": [ { "key": "YXBwLmNyZWF0b3I=", "value": "amFl" }, { "key": "YXBwLmtleQ==", "value": "bmloYXJpa2E=" } ] }, "hash": "EAAD936D3EDCCCF5DD214E02BB4065E5511CA5AC", "height": "3533" }}
注意结果中的value字段,例如bmloYXJpa2E
,这其实是字符串niharika
的base64编码。
现在让我们查询一下:
~$ curl -s 'localhost:26657/abci_query?data="niharika"'
响应结果如下:
{ "jsonrpc":"2.0", "id": "", "result": { "response": { "log": "exists", "index": "-1", "key": "bmloYXJpa2E=", "value": "bmloYXJpa2E=" } }}
很好,看起来我们的Tendermint内核与ABCI接口的工作一切正常!
到此,相信大家对"tendermint简介及开发环境的搭建"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!