![美圖基于以太坊DPoS算法技術實現(xiàn)_第1頁](http://file4.renrendoc.com/view/1fc6eb20304856aaa17999a9838b884d/1fc6eb20304856aaa17999a9838b884d1.gif)
![美圖基于以太坊DPoS算法技術實現(xiàn)_第2頁](http://file4.renrendoc.com/view/1fc6eb20304856aaa17999a9838b884d/1fc6eb20304856aaa17999a9838b884d2.gif)
![美圖基于以太坊DPoS算法技術實現(xiàn)_第3頁](http://file4.renrendoc.com/view/1fc6eb20304856aaa17999a9838b884d/1fc6eb20304856aaa17999a9838b884d3.gif)
![美圖基于以太坊DPoS算法技術實現(xiàn)_第4頁](http://file4.renrendoc.com/view/1fc6eb20304856aaa17999a9838b884d/1fc6eb20304856aaa17999a9838b884d4.gif)
![美圖基于以太坊DPoS算法技術實現(xiàn)_第5頁](http://file4.renrendoc.com/view/1fc6eb20304856aaa17999a9838b884d/1fc6eb20304856aaa17999a9838b884d5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、美圖基于以太坊 DPoS 算法實現(xiàn)技術創(chuàng)新,變革未來簡介以太坊基礎DPoS 實現(xiàn)我們做了什么基于以太坊實現(xiàn)了 DPoS 算法并開源到Github為美圖 貝客錢包 提供基礎服務, 目前支持ERC20, BTC, EOS自研公鏈 正在落地階段代碼地址: Github (h*ps:/meitu/go-ethereum)為什么做改造技術儲備,為公司后續(xù)在區(qū)塊鏈領域布局做好鋪墊開源代碼,回饋社區(qū)通過深入源碼為美圖錢包提供更好的基礎服務簡介以太坊基礎DPoS 實現(xiàn)整體流程發(fā)送交易eth.SendTransaction( from: 0 x1234,to: 0 x5678, nonce: 1,gas: 10
2、0000,gasPrice: 10000000000,value: 100000000000000)from 轉(zhuǎn)賬發(fā)起方to 收款人nonce 單調(diào)遞增計數(shù)器, 防止一筆交易被反復執(zhí)行gas 允許這筆交易使用的最大 gas 值gasPricegas 的單價value 轉(zhuǎn)賬的數(shù)目交易共識算法PoW(Proof of Work)hash(B) M/D (1), 其中 D 1, M, hash = sha256PoS(Proof of Stake) hash(hash(Bprev), A, t) balance(A) * M/D 其中 hash = sha256DPoS(Delegated Proo
3、f of Stake) topN(sort(candidates votes)區(qū)塊以太坊的區(qū)塊由三個部分組成:塊頭,包含了 PoW 算法的隨機數(shù), 難度以及幾個用來存儲交易樹和余額樹的根引用的叔塊,以太坊縮短了出塊時間, 為了安全性引入獎勵叔塊的機制交易,記錄當前塊所打包的交易,其他節(jié)點通過回放交易來更新余額塊頭(圖片來自: h*ps:/preethikasireddy/how-does-ethereum-work-anyway-22d1df506369 )核心幾個成員:noncePoW 算法的隨機數(shù)stateRoot全局,存儲余額以及合約賬戶transacYonRoot每個塊獨有,存放交易R
4、eceiptRoot每個塊獨有,存放交易收據(jù)Merkle Trie自下而上構(gòu)造樹的節(jié)點修改任意節(jié)點會影響到節(jié)點對應所有父節(jié)點MPT(Merkle Patrica Trie)具備 Merkle 樹一樣的防篡改屬性路徑具備索引功能MPT(Merkle Patrica Trie)UTXOs賬號模型對比Accounts 的優(yōu)點:節(jié)省空間簡單且兼容性好UTXOs 的優(yōu)點:具備更高的隱私性并行性更好防 “雙花”對于智能合約更友好簡介以太坊基礎DPoS 實現(xiàn)為什么選擇 DPoSDPoS不需要算力成本、簡單且性能好, 更加適合 DAPP 落地以太坊正在往 PoW + PoS 方向演進為社區(qū)提供一種新的選擇整體
5、流程角色轉(zhuǎn)換投票eth.SendTransaction( type: Vote,from: 0 x123456778, to: 0 x123566884,nonce: 1,gas: 100000,gasPrice: 10000000000,value: 0)增加一個 type 字段來區(qū)分交易類型除轉(zhuǎn)賬交易之外其他 value 必須為 0存儲CandidateTrie 記錄所有的候選人DelegateTrie 記錄候選人對應所有投票人列表MintCntTrie 記錄每個周期候選人對應的出塊數(shù)目為了快速的選舉,需要在塊頭存儲下面幾個全局狀態(tài)樹的 rootEpochTrie 記錄每個周期的驗證人列表
6、VoteTrie 記錄投票人對應投給的候選人選舉選舉prevEpoch := parent.Time.Int64() / epochInterval currentEpoch := ec.TimeStamp / epochIntervalfor i := prevEpoch; i 0; i- j := int(r.Int31n(int32(i + 1)candidatesi, candidatesj = candidatesj, candidatesi根據(jù)時間確定是到達選舉塊使用父塊的哈希值打散候選人統(tǒng)計候選人的票數(shù)并選出 top N調(diào)度公式: current= block number %
7、epoch interval % validators比如 13 % 10 % 5 = 3, 那么就是輪到圖中的 validator-2 出塊調(diào)度func (ec *EpochContext) lookupValidator(now int64) (validator common.Address, err error) offset := now % epochInterval offset /= blockIntervalvalidators, err := ec.DposContext.GetValidators()if err != nil return common.Address,
8、 errvalidatorSize := len(validators) offset %= int64(validatorSize)return validatorsoffset, nil根據(jù)當前時間以及當前驗證人來列表來確定是否輪到當前節(jié)點出塊出塊func (self *worker) mintBlock(now int64) error err := engine.CheckValidator(self.chain.CurrentBlock(), now) if err != nil return errwork, err := self.createNewWork()if err !=
9、 nil return errresult, err := self.engine.Seal(self.chain, work.Block, self.quitCh)if err != nil return err查詢出塊人以及時間創(chuàng)建塊頭,打包交易驗證人簽名塊廣播測試# 編譯$ cd go-etherem & make geth# 通過配置文件創(chuàng)建第一個創(chuàng)世塊, 第一批驗證人通過配置文件指定$ ./build/bin/geth init -datadir /path/to/datadir dpos_test_genesis.json# 啟動$ ./build/bin/geth -datadi
10、r /path/to/datadir -keystore /path/to/keystore console# 解鎖驗證人的賬號$ personal.unlock($validator, $passwd, 0)# 設置驗證人$ miner.setValidator($validator)# 開啟挖礦$ miner.start()遇到的一些問題節(jié)點默認 fast sync模式啟動, 這種模式下無法接受新塊導致同步一直失敗共識算法的 單元測試 和其他模塊關系緊密, 修改共識算法需要調(diào)整大量單元測試代碼量大,調(diào)試 是個體力活Referencesh*ps:/ethereum/go-ethereumh*ps:/ethereum.github.io/yellowpaper/paper.pdfh*ps:/ethereum/wiki/wiki/White-Paperh*ps:/ethereum/wiki/wiki/Design-RaYonaleh*ps:/en/developer
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度回遷房項目配套設施建設合同
- 2025年度建筑腳手架租賃與施工技術支持服務合同
- 2025年度虛擬現(xiàn)實游戲開發(fā)共同出資合伙經(jīng)營合同書
- 2025年度新能源儲能技術研發(fā)股份合同
- 2025年度農(nóng)業(yè)機械化設備集中采購合同樣本
- 2025年度智能穿戴購物卡銷售與服務合同
- 2025年度橘子種植與農(nóng)產(chǎn)品電商平臺合作合同
- 2025年度數(shù)據(jù)中心建設與維護工程技術承包合同
- 2025年度個人住房貸款合同范本分期還款細則
- 2025年度酒吧服務員專項技能培訓與勞動合同
- 智能RPA財務機器人開發(fā)教程-基于來也UiBot 課件 第1章-機器人流程自動化概述
- 2024-2025學年天津市河東區(qū)高一上學期期末質(zhì)量檢測數(shù)學試卷(含答案)
- 信永中和筆試題庫及答案
- 甲流乙流培訓課件
- 《視網(wǎng)膜靜脈阻塞》課件
- 2025《省建設工程檔案移交合同書(責任書)》
- 《大學英語1》期末考試試卷及答案(???
- 《石油鉆井基本知識》課件
- 2024新滬教版英語(五四學制)七年級上單詞默寫單
- 電力兩票培訓
- TCCEAS001-2022建設項目工程總承包計價規(guī)范
評論
0/150
提交評論