百行代碼簡(jiǎn)單實(shí)現(xiàn)區(qū)塊鏈POS(權(quán)益證明)挖礦機(jī)制


源碼地址:https://github.com/corgi-kx/blockchain_consensus_algorithm/tree/master/pos

權(quán)益證明機(jī)制最開(kāi)始是由點(diǎn)點(diǎn)幣提出并應(yīng)用(出塊概率=代幣數(shù)量 * 幣齡) 簡(jiǎn)單來(lái)說(shuō)誰(shuí)的幣多,誰(shuí)就有更大的出塊概率芳誓。但是深挖下去,這個(gè)出塊概率誰(shuí)來(lái)計(jì)算?碰到無(wú)成本利益關(guān)系問(wèn)題怎么辦?這個(gè)共識(shí)算法初看很簡(jiǎn)單,實(shí)際有很多問(wèn)題需要解決歇父,且看以太坊什么時(shí)候能完全轉(zhuǎn)換到POS機(jī)制吧

區(qū)塊結(jié)構(gòu)

type block struct {
    //上一個(gè)塊的hash
    prehash string
    //本塊hash
    hash string
    //時(shí)間戳
    timestamp string
    //區(qū)塊內(nèi)容
    data string
    //區(qū)塊高度
    height int
    //挖出本塊的地址
    address string
}

聲明兩個(gè)節(jié)點(diǎn)池语盈。
mineNodesPool 用來(lái)存放指定的挖礦節(jié)點(diǎn)
probabilityNodesPool 用于存入挖礦節(jié)點(diǎn)的代幣數(shù)量*幣齡獲得的概率

//用于存儲(chǔ)區(qū)塊鏈
var blockchain []block
//代表挖礦節(jié)點(diǎn)
type node struct{
    //代幣數(shù)量
    tokens int
    //質(zhì)押時(shí)間
    days  int
    //節(jié)點(diǎn)地址
    address string
}
//挖礦節(jié)點(diǎn)
var mineNodesPool []node
//概率節(jié)點(diǎn)池
var  probabilityNodesPool []node

初始化節(jié)點(diǎn)池:

func init () {
    //手動(dòng)添加兩個(gè)節(jié)點(diǎn)
    mineNodesPool = append(mineNodesPool,node{1000,1,"AAAAAAAAAA"})
    mineNodesPool = append(mineNodesPool,node{100,3,"BBBBBBBBBB"})
    //初始化隨機(jī)節(jié)點(diǎn)池(挖礦概率與代幣數(shù)量和幣齡有關(guān))
    for _,v:=range mineNodesPool{
        for i:=0;i<=v.tokens * v.days; i ++ {
            randNodesPool = append(randNodesPool,v)
        }
    }
}

每次挖礦都會(huì)從概率節(jié)點(diǎn)池中隨機(jī)選出獲得出塊權(quán)的節(jié)點(diǎn)地址

//隨機(jī)得出挖礦地址(挖礦概率跟代幣數(shù)量與幣齡有關(guān))
func getMineNodeAddress() string{
    bInt:=big.NewInt(int64(len(randNodesPool)))
    //得出一個(gè)隨機(jī)數(shù),最大不超過(guò)隨機(jī)節(jié)點(diǎn)池的大小
    rInt,err:=rand.Int(rand.Reader,bInt)
    if err != nil {
        log.Panic(err)
    }
    return randNodesPool[int(rInt.Int64())].address
}
func main() {
    //創(chuàng)建創(chuàng)世區(qū)塊
    genesisBlock := block{"0000000000000000000000000000000000000000000000000000000000000000","",time.Now().Format("2006-01-02 15:04:05"),"我是創(chuàng)世區(qū)塊",1,"0000000000"}
    genesisBlock.getHash()
    //把創(chuàng)世區(qū)塊添加進(jìn)區(qū)塊鏈
    blockchain = append(blockchain,genesisBlock)
    fmt.Println(blockchain[0])
    i:=0
    for  {
        time.Sleep(time.Second)
        newBlock:=generateNewBlock(blockchain[i],"我是區(qū)塊內(nèi)容","00000")
        blockchain = append(blockchain,newBlock)
        fmt.Println(blockchain[i + 1])
        i++
    }
}

運(yùn)行結(jié)果:


image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末硅确,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子明肮,更是在濱河造成了極大的恐慌菱农,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柿估,死亡現(xiàn)場(chǎng)離奇詭異大莫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)官份,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)只厘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人舅巷,你說(shuō)我怎么就攤上這事羔味。” “怎么了钠右?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵赋元,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我飒房,道長(zhǎng)搁凸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任狠毯,我火速辦了婚禮护糖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚼松。我一直安慰自己嫡良,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布献酗。 她就那樣靜靜地躺著寝受,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罕偎。 梳的紋絲不亂的頭發(fā)上很澄,一...
    開(kāi)封第一講書(shū)人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼甩苛。 笑死忙干,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浪藻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼乾翔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼爱葵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起反浓,我...
    開(kāi)封第一講書(shū)人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤萌丈,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后雷则,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辆雾,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年月劈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了度迂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猜揪,死狀恐怖惭墓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情而姐,我是刑警寧澤腊凶,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站拴念,受9級(jí)特大地震影響钧萍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜政鼠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一风瘦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧公般,春花似錦弛秋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至遏佣,卻和暖如春挖炬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背状婶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工意敛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留馅巷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓草姻,卻偏偏與公主長(zhǎng)得像钓猬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撩独,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容