源碼
GitHub地址 https://github.com/TTCECO/gttc
目錄
基于以太坊go-ethereum的DPOS實(shí)現(xiàn)(一)源碼及測試運(yùn)行
基于以太坊go-ethereum的DPOS實(shí)現(xiàn)(二)簡要說明
基于以太坊go-ethereum的DPOS實(shí)現(xiàn)(三)創(chuàng)世塊
基于以太坊go-ethereum的DPOS實(shí)現(xiàn)(四)共識接口
基于以太坊go-ethereum的DPOS實(shí)現(xiàn)(五)定時出塊
基于以太坊go-ethereum的DPOS實(shí)現(xiàn)(六)代表選擇
代表選擇
在POW共識中翘悉,沒有代表的概念往衷,任何地址都可以出塊沒有限制。對于整體來說好爬,算力證明來保證最長鏈的安全,對于個體來說辛藻,一切都是運(yùn)氣卖怜。出塊塊的過程,好像是不停再重復(fù)著一個贏家通吃的賭*博游戲谦屑。這也是比特幣設(shè)計(jì)中精彩的地方,利用人性的貪婪來維護(hù)系統(tǒng)的運(yùn)行篇梭。
相比而言氢橙,DPOS共識更像一個現(xiàn)代的社會形態(tài),由選出來的代表來執(zhí)行某些特定的任務(wù)恬偷,即出塊『肥郑現(xiàn)實(shí)中的選擇過程會集中統(tǒng)計(jì)每個個體的選擇結(jié)果,在區(qū)塊鏈當(dāng)中,依然如此谓苟,不過個體由生命變?yōu)橘Y金⌒或者換句話說涝焙,每個加密貨幣擁有者做出的選擇,是你代替你的每一個單位的加密貨幣做出的選擇孕暇。
在程序中仑撞,我們會構(gòu)造一種特別的交易,從A地址向B地址轉(zhuǎn)移數(shù)量為0的代幣妖滔,代表A投*票給B地址隧哮,而票數(shù)的計(jì)算則是A地址當(dāng)前擁有貨幣的數(shù)量瓶逃。
func (a *Alien) processEventVote(currentBlockVotes []Vote, state *state.StateDB, tx *types.Transaction, voter common.Address) []Vote {
a.lock.RLock()
stake := state.GetBalance(voter)
a.lock.RUnlock()
currentBlockVotes = append(currentBlockVotes, Vote{
Voter: voter,
Candidate: *tx.To(),
Stake: stake,
})
return currentBlockVotes
}
每個投票的結(jié)果讲弄,都會在snapshot中進(jìn)行計(jì)算,其結(jié)果會直接決定哪些地址有資格成為代表骚亿,打包交易曲秉,生產(chǎn)新的塊采蚀。