美圖基于以太坊DPoS算法技術(shù)實現(xiàn)_第1頁
美圖基于以太坊DPoS算法技術(shù)實現(xiàn)_第2頁
美圖基于以太坊DPoS算法技術(shù)實現(xiàn)_第3頁
美圖基于以太坊DPoS算法技術(shù)實現(xiàn)_第4頁
美圖基于以太坊DPoS算法技術(shù)實現(xiàn)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、美圖基于以太坊 DPoS 算法實現(xiàn)技術(shù)創(chuàng)新,變革未來簡介以太坊基礎(chǔ)DPoS 實現(xiàn)我們做了什么基于以太坊實現(xiàn)了 DPoS 算法并開源到Github為美圖 貝客錢包 提供基礎(chǔ)服務(wù), 目前支持ERC20, BTC, EOS自研公鏈 正在落地階段代碼地址: Github (h*ps:/meitu/go-ethereum)為什么做改造技術(shù)儲備,為公司后續(xù)在區(qū)塊鏈領(lǐng)域布局做好鋪墊開源代碼,回饋社區(qū)通過深入源碼為美圖錢包提供更好的基礎(chǔ)服務(wù)簡介以太坊基礎(chǔ)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ù)器, 防止一筆交易被反復(fù)執(zhí)行g(shù)as 允許這筆交易使用的最大 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 算法的隨機(jī)數(shù), 難度以及幾個用來存儲交易樹和余額樹的根引用的叔塊,以太坊縮短了出塊時間, 為了安全性引入獎勵叔塊的機(jī)制交易,記錄當(dāng)前塊所打包的交易,其他節(jié)點通過回放交易來更新余額塊頭(圖片來自: h*ps:/preethikasireddy/how-does-ethereum-work-anyway-22d1df506369 )核心幾個成員:noncePoW 算法的隨機(jī)數(shù)stateRoot全局,存儲余額以及合約賬戶transacYonRoot每個塊獨有,存放交易R

4、eceiptRoot每個塊獨有,存放交易收據(jù)Merkle Trie自下而上構(gòu)造樹的節(jié)點修改任意節(jié)點會影響到節(jié)點對應(yīng)所有父節(jié)點MPT(Merkle Patrica Trie)具備 Merkle 樹一樣的防篡改屬性路徑具備索引功能MPT(Merkle Patrica Trie)UTXOs賬號模型對比Accounts 的優(yōu)點:節(jié)省空間簡單且兼容性好UTXOs 的優(yōu)點:具備更高的隱私性并行性更好防 “雙花”對于智能合約更友好簡介以太坊基礎(chǔ)DPoS 實現(xiàn)為什么選擇 DPoSDPoS不需要算力成本、簡單且性能好, 更加適合 DAPP 落地以太坊正在往 PoW + PoS 方向演進(jìn)為社區(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 記錄候選人對應(yīng)所有投票人列表MintCntTrie 記錄每個周期候選人對應(yīng)的出塊數(shù)目為了快速的選舉,需要在塊頭存儲下面幾個全局狀態(tài)樹的 rootEpochTrie 記錄每個周期的驗證人列表

6、VoteTrie 記錄投票人對應(yīng)投給的候選人選舉選舉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ù)時間確定是到達(dá)選舉塊使用父塊的哈希值打散候選人統(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ù)當(dāng)前時間以及當(dāng)前驗證人來列表來確定是否輪到當(dāng)前節(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)# 設(shè)置驗證人$ miner.setValidator($validator)# 開啟挖礦$ miner.start()遇到的一些問題節(jié)點默認(rèn) fast sync模式啟動, 這種模式下無法接受新塊導(dǎo)致同步一直失敗共識算法的 單元測試 和其他模塊關(guān)系緊密, 修改共識算法需要調(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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論