初鏈主網Beta版於新加坡時間2018年09月28日08:00正式上線
TrueScan區塊鏈瀏覽器
TrueChain官網
TrueChain分析解讀
TrueChain或許是下一個千億級項目?
相較於EOS:EOS其採用的是DPOS共識機制。對運行效率追求之致,但是喪失了區塊鏈的根本去中心化的安全性。名義上是類中心化、半中心化,實際上已全然喪失了區塊鏈去中心化的本質。單一共識機制捨棄去中心化本質,又面臨着可見的服務速度上限,已無法滿足開發者的需求。
和以太坊的關係:“初鏈”是構建在以太坊之上的區塊鏈,但和以太坊擁有不同的共識策略。目前對於“初鏈”代碼,最有研究價值的就是其混合共識和雙鏈機制。
系統組成:
“初鏈”是構建在以太坊之上的區塊鏈,所以主要組成部分相同
- 賬戶(accounts)
- 狀態(state)
- 損耗和費用(gas and fees)
- 交易(transactions)
- 區塊(blocks)
- 交易執行(transaction execution)
- 挖礦(mining)
- 工作量證明(proof of work)
- 拜占庭管理委員會(PBFT)
賬戶
整個生態全局由很多小對象(賬戶)來組成,這些賬戶可以通過消息傳遞架構來與對方進行交互。每個賬戶都有一個與之關聯的狀態(state)和一個20字節的地址(address)。
-
賬戶類型
合約賬戶:
合約代碼控制與代碼關聯,不可以自己發起一個交易,只有在接收到一個交易之後,爲了響應此交易而觸發一個交易。
外部賬戶:
私鑰控制與代碼無關聯,可通過創建和用自己的私鑰來對交易進行簽名,來發送消息給另一個外部擁有賬戶或合約賬戶
外部賬戶發送消息到外部賬戶:只是一個簡單的價值轉移。
外部賬戶發送消息到合約賬戶:激活合約賬戶的代碼,允許它執行各種動作,如:轉移代幣,寫入內部存儲,挖幣,執行運算,創建新合約等 -
賬戶狀態
nonce:交易序號或合約序號
balance:此地址擁有Wei的數量(1Ether=10^18Wei)
storageRoot: Merkle樹根節點Hash值,會將此賬戶存儲內容的Hash值進行編碼,默認是空值
codeHash: 此賬戶EVM代碼的hash值 -
世界狀態
Merkle樹:由一系列節點組成的二叉樹
- 一個根節點,兩個子節點的Hash值,代表着整棵樹
- 一系列的中間的節點,這些節點是兩個子節點的Hash值
- 包含了源數據的大量葉子節點
Merkle樹要求每個值(value)對應key。key會告訴你順着哪個子節點可以獲得對應的值,值存在葉子節點。
每個塊都有一個頭(header),保存了三個不同Merkle trie結構的根節點的Hash
樹結構用來存儲交易和收據 ,分爲三種狀態樹
- 狀態樹(stateRoot)
- 交易樹(transactionsRoot)
- 收據樹(receiptsRoot)
如果一個惡意用戶試圖用一個假交易來交換Merkle樹底的交易,這個會改變它上面節點的hash值,而它上面節點的值的改變也會導致上上一個節點Hash值的改變,以此類推,一直到樹的根節點。
交易流程
PBFT(拜占庭容錯)
基於拜占庭將軍問題,一致性的確保主要分爲這三個階段:預準備(pre-prepare)、準備(prepare)和確認(commit)。流程如下圖所示:
其中C爲發送請求端,0123爲服務端,3爲宕機的服務端,具體步驟如下:
- Request:請求端C發送請求到任意一節點,這裏是0
- Pre-Prepare:服務端0收到C的請求後進行廣播,擴散至123
- Prepare:123,收到後記錄並再次廣播,1->023,2->013,3因爲宕機無法廣播
- Commit:0123節點在Prepare階段,若收到超過一定數量的相同請求,則進入Commit階段,廣播Commit請求
5.Reply:0123節點在Commit階段,若收到超過一定數量的相同請求,則對C進行反饋
根據上述流程,在 N ≥ 3F + 1 的情況下一致性是可能解決,N爲總計算機數,F爲有問題的計算機總數
N=4 F=0 時:
最終數據 | 得到數據 | |
---|---|---|
A | 1 1 1 1 | 1 |
B | 1 1 1 1 | 1 |
C | 1 1 1 1 | 1 |
D | 1 1 1 1 | 1 |
N=4 F=1 時:
最終數據 | 得到數據 | |
---|---|---|
A | 1 1 1 0 | 1 |
B | 1 1 0 1 | 1 |
C | 1 0 1 1 | 1 |
D | 0 1 1 1 | 1 |
N=4 F=2 時:
最終數據 | 得到數據 | |
---|---|---|
A | 1 1 0 0 | NA |
B | 1 0 0 1 | NA |
C | 0 0 1 1 | NA |
D | 0 1 1 0 | NA |
由此可以看出,拜占庭容錯能夠容納將近1/3的錯誤節點誤差
truechain-consensus-core
源碼分析
config
(配置文件)
- hosts
127.0.0.1
主機配置地址 - logistics_bft.cfg 路徑配置文件
- tunables_bft.yaml 測試平臺公共配置文件
docs
(文檔)
support
(支持)
-
scripts Shell腳本文件
build.sh
構建腳本
check.sh
檢測腳本
install.sh
安裝腳本
test.sh
測試腳本 -
toolchain
工具鏈文件
Dockerfile
Docker文件
fetch.sh
用於從遠程URL下載文件並驗證,SHA1或SHA256校驗
patch.tar.xz
補丁包
tests/core-consensus
(測試/核心共識)
keygen_tests.go
祕鑰生成測試文件
trueconsensus
:true共識
client/client.go
客戶端
包含方法:
Start()
:客戶端初始狀態的通知程序
CHANGELOG.md
:更新日誌
CODE_OF_CONDUCT
.md:行爲守則
CONTRIBUTIONS.md
:貢獻指南
HyperMake
LICENSE
:許可
MAINTAINERS.md
:維護人員
README.md
build.sh
無許可(Permissionless)環境下的混合共識公鏈,科學採用雙鏈結構
初鏈TrueChain採用PBFT+PoW混合共識,起初預設將PBFT和PoW揉合到一條鏈上,但卻發現這樣的設計從數據結構的搭建和共識的驗證上非常難以實現。經過反覆的論證,初鏈最終決定變更爲雙鏈結構,將PBFT作爲快鏈,而將PoW作爲慢鏈,快鏈用於存儲賬本和達成交易,慢鏈用於挖礦和委員會選舉,從而實現了公平和效率的有效融合,並使得數據結構變得更加清晰,使兩種共識之間的通信變得更加容易。
快鏈(FastChain):
基礎:PBFT
作用:用於存儲賬本和達成交易
慢鏈(SnailChain):
基礎:PoW
作用:用於挖礦和委員會選舉
PBFT的節點從POW的節點中選出,同時建立淘汰機制:任何超出安全邊際,即超時、做假賬或有偏向性記錄的節點都將被淘汰。而這種淘汰機制的運行,運用POW來實現。由於PBFT計算複雜度的問題,上層負責記錄的PBFT超級節點將始終保持在30個以內。但POW可以無限接納新的節點。由此,速度、安全性和去中心化本質得到了兼顧。
PBFT+POW,一個負責性能擴展,一個負責記賬的安全性,PBFT+POW能使應用的交易速度過到1萬到10萬tps,性能就是指計算速度,節點多了,速度就慢了,只用POW速度就慢了,但是安全性靠譜,PBFT節點有限,速度快,所以選出來的節點很重要,PBFT高速受限,POW低速安全,無限制,PBFT爲了保持高速運轉要把節點控制在30個以內,POW可以無限擴展,就相當於更多的人知道這筆交易,也就更真實,不容易產生假賬POW可以淘汰PBFT裏的虛假信息,相當於一筆帳同時記兩個賬本上,如果不一樣那肯定有問題。
將水果鏈整合到PoW,發佈自己的FPOW機制的公鏈
在目前的礦機生態下,PoW慢鏈需要避免Selfish Mining Attack和Eclipse Attack等問題。在尋求解決方案的過程中,初鏈TrueChain團隊大膽嘗試用fPoW協議(FruitChain)替代中本聰的原始PoW協議(Nakamoto PoW),從工程上實現了將水果鏈整合到PoW中,從而成爲fPOW。水果鏈的實現,使得普通挖礦者可以更加公平地參與到挖礦過程中,並獲得更加公平地獎勵分配,這使初鏈成爲名副其實的去中心化公鏈。
TrueHash,實現不依賴手動調整,從而根本上抗ASIC的挖礦算法
從 BTC 之後,很多區塊鏈開發者一直在嘗試各種不同的抗 ASIC 挖礦算法。從最終結果來看,這些嘗試無疑都是失敗的。在新一代公鏈中,初鏈研究團隊作爲PoW的捍衛者和拯救者,獨創了本質上抗ASIC的挖礦算法,可以實現算法的隨機切換,使得再強大的ASIC也無法繞過馮諾依曼瓶頸,從而保護普通礦工的權益。
混合共識PBFT委員會的隨機選舉機制
初鏈“交易處理擔當”主要爲PBFT委員會,爲保證公平和安全性,初鏈PBFT委員會將定期換屆,如何在換屆時公平地選舉PBFT委員成爲這一過程要重點攻克的問題。經過初鏈研究和技術團隊的並肩作戰,最終實現了隨機算法,基於VRF(verify random function,可驗證隨機函數)可以實現PBFT節點等概率的公平選舉。而這裏面也會有一些過濾,過濾掉一些挖水果特別少的礦工,因爲他們挖的特別少,可能他們的硬件設備或者網絡情況不太好。從剩下滿足處理交易條件的節點中,隨機的公平的選舉出來PBFT委員會成員。
在尚未實現Sharding技術情況下,在內測階段的每秒鐘交易速度TPS均值達到1200左右,峯值達到1900左右
在目前已經上線的在無許可(Permissionless)環境中運行的公鏈中,初鏈TrueChain主網Beta版的tps的性能已經非常高,在後期正式主網發佈和加上Sharding分片技術的融入,TPS將達到更高的性能要求。