tendermint區塊鏈五分鐘入門
區塊鏈應用已經從單純電子現金髮展到去中心化投票等更多的領域,但是區塊鏈這樣的分散式系統的開發還存在一些困難的問題:安全、可靠性、敏捷度、以及一致性保證等等。Tendermint 的目的就是致力於解決分散式系統開發中像公示演算法這樣的技術難點,而讓 Tendermint 區塊鏈應用開發者可以將關注點集中在業務邏輯上。
> 如果希望快速掌握基於 Tendermint 的區塊鏈開發,推薦匯智網的線上互動課程:Tendermint 區塊鏈開發詳解,技術問題可諮詢課程助教。
Tendermint 簡介
Tendermint 萌芽於比特幣、以太坊這樣的加密貨幣,它的目標是提供一個比比特幣的工作量證明(PoW)更加高效和安全的共識演算法。簡單地說,Tendermint 是一個可供二次開發的軟體包,可以在多臺機器上安全、一致地實現應用狀態的複製。
- Tendermint 可以在不超過 1/3 的機器失效時依然正常工作,無論失效的原因 是什麼。Tendermint 實現了拜占庭容錯。
- 任何正常工作的機器都會收到相同的交易日誌,並分別推匯出相同的狀態
Tendermint 的特性如下圖所示:
Tendermint 包含兩個主要的元件:
- 區塊鏈共識引擎,即:Tendermint 核心
- 應用與區塊連結口,即:Application Block*Chain **I*nterface
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.json
I[10–18|20:14:08.996] Generated node key module=main path=/Users/niharikasingh/.tendermint/config/node_key.json
I[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 核心,然後通過節點旳 ABCI 介面提交了一個交易來更新內建鍵值庫應用的狀態,最後通過 ABCI 介面查詢了 ABCI 應用的狀態。這就是基於 Tendermint 進行應用開發的核心模型:可以使用任何開發語言來代替 curl 完成這些操作,實現自己的 ABCI 應用!
原文連結:自主可控區塊鏈神器 Tendermint 五分鐘入門 - 匯智網
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 區塊鏈入門區塊鏈
- 區塊鏈入門 -- 02 區塊鏈介紹區塊鏈
- 區塊鏈時代的拜占庭容錯:Tendermint(二)區塊鏈
- 區塊鏈入門 ③ - 交易區塊鏈
- 區塊鏈入門教程區塊鏈
- 轉:區塊鏈入門教程區塊鏈
- 區塊鏈技術入門應用區塊鏈
- 區塊鏈開發Hyperledger Fabric入門區塊鏈
- 區塊鏈入門知識介紹!區塊鏈
- 區塊鏈入門——比特幣科普區塊鏈比特幣
- 區塊鏈開發Hyperledger Sawtooth入門區塊鏈
- 區塊鏈技術:智慧合約入門區塊鏈
- [譯]區塊鏈技術全解析入門版區塊鏈
- 區塊鏈入門及非對稱加密技術區塊鏈加密
- 區塊鏈教程、區塊鏈指南、區塊鏈中文手冊、區塊鏈原理區塊鏈
- 區塊鏈入門知識《精通比特幣》——介紹區塊鏈比特幣
- 區塊鏈入門知識《精通比特幣》——開篇區塊鏈比特幣
- 區塊鏈開發入門如何選擇程式語言?區塊鏈
- 3分鐘瞭解區塊鏈中的公有鏈和私有鏈區塊鏈
- 簡單的區塊鏈開發入門:Hyperledger Iroha介紹區塊鏈
- 區塊鏈100講:區塊鏈為什麼叫“區塊”“鏈”?區塊鏈
- 五分鐘讀懂區塊鏈到底是個什麼鏈?區塊鏈
- 三分鐘,快速瞭解區塊鏈技術!區塊鏈
- 區塊鏈系列1-區塊鏈概述區塊鏈
- 區塊鏈知識,區塊鏈簡史區塊鏈
- 區塊鏈全節點的JavaScript實現:Bcoin 入門 - pradyuman區塊鏈JavaScript
- Block.one的EOS區塊鏈入門開發教程Elemental BattlesBloC區塊鏈BAT
- 以太坊DApp開發入門教程——區塊鏈投票系統APP區塊鏈
- 區塊鏈區塊鏈
- 區塊鏈開發_建立區塊鏈公鏈,聯盟鏈,私有鏈區塊鏈
- 區塊鏈 2.0:房地產區塊鏈(四)區塊鏈
- 1.3 初識區塊鏈:區塊鏈分類區塊鏈
- 區塊鏈以及區塊鏈技術總結區塊鏈
- 10分鐘弄懂當前各主流區塊鏈架構區塊鏈架構
- 區塊鏈應用:NAS星雲鏈 入門之從零開發第一個DAPP區塊鏈APP
- 從區塊鏈公司角度,分析區塊鏈錢包區塊鏈
- “區塊”和“鏈”的火花,區塊鏈到底為何物區塊鏈
- 區塊鏈大火?區塊鏈究竟是什麼?區塊鏈