BNB 鏈
如何運行
BNBSmartChainLightClient 是 BNBSmartChain Light Client 在 Solidity 中作為 MapoContract 的實現。
BNB 智能鏈依賴於一個由 21 個活躍驗證者組成的系統,具有 [權益證明 (PoSA) 共識](https://github.com/bnb-chain/whitepaper/blob/master/WHITEPAPER.md#consensus-and-validator -quorum),可以支持較短的出塊時間和較低的費用。 抵押最多的驗證者候選人將成為驗證者並生產區塊。 雙簽檢測和其他罰沒邏輯保證了安全性、穩定性和鏈的最終性。
驗證器在每個紀元發生變化,每個選定的驗證者地址都被寫入塊頭的 extraData 字段中的紀元塊。 在該塊的一半數量的驗證者開始生產和驗證該塊之後。這些驗證者通過簽署包含由每個驗證者的私鑰簽名的加密簽名的塊來參與共識協議。
struct BlockHeader {
bytes parentHash;
bytes sha3Uncles;
address miner;
bytes stateRoot;
bytes transactionsRoot;
bytes receiptsRoot;
bytes logsBloom;
uint256 difficulty;
uint256 number;
uint256 gasLimit;
uint256 gasUsed;
uint256 timestamp;
bytes extraData;
bytes mixHash;
bytes nonce;
}如果我們要驗證一筆交易,我們需要驗證交易所在的區塊頭,驗證一個區塊頭,我們需要驗證區塊頭的簽名。
通過跟踪驗證者的變化,輕節點可以驗證所有 bsc 交易。
如何驗證
更新塊頭
通過不斷向輕客戶端提交紀元塊頭來跟踪驗證器的更改。提交的紀元塊必須由前一個紀元提交的驗證器之一使用私鑰簽名。 所以我們初始化一個紀元並存儲驗證者的地址可以不斷地一遍又一遍地提交下一個紀元塊。為了提高確定性,需要提交多個塊作為確認。
updateBlockHeader 走幾步
1.檢查第一個提交的塊是否是下一個紀元塊。
2.檢查提交的區塊數是否足夠。
3.分別驗證每個提交的區塊。
驗證區塊的字段
驗證區塊的簽名
check if miner is in the corresponding validatorSet.
驗證礦工是否重複
4.store validatorSet.
驗證收據
輕客戶端在有了epoch validatorSet之後就可以驗證epoch blocks了。驗證receipt首先要驗證block transaction receipt in。驗證block和update block相似,不會再進去了。
我們知道來自大宗交易的收據形成收據 patricia-merkle-trie。 塊字段 receiptsRoot 是樹的根。 在我們驗證該塊之後,我們可以信任 receiptsRoot。
因此我們可以建立鏈下交易收據的證明,提交給輕客戶端以證明交易收據。
證明
Last updated
Was this helpful?