找回密码
 立即注册
首页 业界区 安全 Tendermint拜占庭容错引擎

Tendermint拜占庭容错引擎

后沛若 昨天 14:50
最近在研究学习Tendermint , 其实这是一个比较完善的联盟链底层框架了,实现了共识协议、p2p、区块数据存储、交易mempool管理、状态重放、rpc接口这些。开发者只需要写ABCI程序,作为tendermint节点网络的“插件”来处理交易签名校验、交易的业务处理等等。
这里记录一下实践过程中的一些个操作。
tendermint下载:https://github.com/tendermint/tendermint/releases
流程:用curl向tendermint节点26657端口发送转账和查询两个请求,tendermint会通过gRPC调用ABCI程序来进行交易验签、账务处理、账务查询等操作。
简化架构:这里用的是单节点tendermint,实际上应该是最少4节点。另外ABCI没有持久化存储,每次启动跟tendermint节点进行区块数据同步的时候也是返回的默认数据,所以每次启动tendermint节点的时候都需要清空一下tendermint-home目录。但是这些不影响对整体功能的理解。
ABCI程序启动
  1. mvn compile
  2. mvn package -DskipTests
  3. java -jar .\target\tendermint-abci-1.0-SNAPSHOT.jar
复制代码
tendermint节点初始化
  1. .\tendermint.exe init --home .\tendermint-home\
复制代码
tendermint节点启动:
  1. .\tendermint.exe node --home .\tendermint-home\ `
  2. --abci grpc `
  3. --proxy_app tcp://127.0.0.1:26658
复制代码
密钥对
  1. === alice ===
  2. PublicKey:  MCowBQYDK2VwAyEAqUGJETBs0UM8N/2dt2jxws7/W16XZG7Z7fmn+vakwgY=
  3. PrivateKey: MC4CAQAwBQYDK2VwBCIEIN20QL5UtLYUtankHQ1uaTk8mPmOzc47HykL7HbahZ7z
  4. === bob ===
  5. PublicKey:  MCowBQYDK2VwAyEAafLrCRx28XE/oUMjTTUe3WNyJoRVHOmSVOvYOq33SBo=
  6. PrivateKey: MC4CAQAwBQYDK2VwBCIEIEsX3Hb77evB6hONZHw0K7kyf3auC3rpI8lGDmUaU+TU
  7. === carol ===
  8. PublicKey:  MCowBQYDK2VwAyEAUVarvjgIFfokE2v1wn8xetKmW0rcSfsW9p3CZvfshXM=
  9. PrivateKey: MC4CAQAwBQYDK2VwBCIEIK7yfAc6zj5CsFwRrh1toNglZr5xJIvZl+fNxYQIyt+8
复制代码
模拟客户端请求:
curl "http://localhost:26657/broadcast_tx_commit?tx="{"fromId":"alice","toId":"bob","amount":100}""
curl "http://localhost:26657/abci_query?data="alice""
构造的客户端请求(带签名)
  1. {"amount":100,"fromId":"alice","signContent":"alice:bob:100","signature":"K5UFXaUAtMAom9Km2zLYEOVLC1O1MDr2XP2BY4N2nO+BK50QfEty8JLugxboZNx3EMeh2m5rBKVA278KKI9TCQ==","toId":"bob"}
复制代码
模拟客户端请求(powershell)

执行转账
  1. $txBytes = [System.Text.Encoding]::UTF8.GetBytes('{"amount":100,"fromId":"alice","signContent":"alice:bob:100","signature":"K5UFXaUAtMAom9Km2zLYEOVLC1O1MDr2XP2BY4N2nO+BK50QfEty8JLugxboZNx3EMeh2m5rBKVA278KKI9TCQ==","toId":"bob"}')
  2. $txHex = ($txBytes | ForEach-Object { $_.ToString("x2") }) -join ""
  3. curl "http://localhost:26657/broadcast_tx_commit?tx=0x$txHex"
复制代码
查询
  1. $queryBytes = [System.Text.Encoding]::UTF8.GetBytes('alice')
  2. $queryHex = ($queryBytes | ForEach-Object { $_.ToString("x2") }) -join ""
  3. curl "http://localhost:26657/abci_query?data=0x$queryHex"
复制代码
执行结果
  1. StatusCode        : 200
  2. StatusDescription : OK
  3. Content           : {"jsonrpc":"2.0","id":-1,"result":{"response":{"code":0,"log":"balance: 900","info":"","index":"0",
  4.                     "key":null,"value":"OTAw","proofOps":null,"height":"0","codespace":""}}}
  5. RawContent        : HTTP/1.1 200 OK
  6.                     X-Server-Time: 1774939938
  7.                     Content-Length: 171
  8.                     Content-Type: application/json
  9.                     Date: Tue, 31 Mar 2026 06:52:18 GMT
  10.                     {"jsonrpc":"2.0","id":-1,"result":{"response":{"code":0,"log":"b...
  11. Forms             : {}
  12. Headers           : {[X-Server-Time, 1774939938], [Content-Length, 171], [Content-Type, application/json], [Date, Tue,
  13.                     31 Mar 2026 06:52:18 GMT]}
  14. Images            : {}
  15. InputFields       : {}
  16. Links             : {}
  17. ParsedHtml        : System.__ComObject
  18. RawContentLength  : 171
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册