PoS 權益證明 go簡單實現

2021-09-01 10:27:39 字數 1784 閱讀 3056

⚫pos(proof of stake)譯為權益證明,是一種在公鏈中的共識演算法,可作為 pow 算 法的一種替換

⚫基於權益證明的數字貨幣中,下乙個區塊的選擇是根據不同節點的股份和時間進行 隨機選擇的

⚫pos 的設計理念,來自於對位元幣危機的思考,位元幣的區塊產量每 4 年會減半, 在不久的未來,隨著位元幣區塊包含的產量越來越低,大家挖礦的動力將會不斷下 降,礦工人數越來越少,整個位元幣網路有可能會逐漸陷入癱瘓

⚫其次,若干年後,隨著礦工人數的下降,位元幣很有可能被一些高算力的人、或團 隊、或礦池,進行 51%攻擊,導致整個位元幣網路崩潰

package main

import (

"time"

"strconv"

"crypto/sha256"

"encoding/hex"

"math/rand"

"fmt"

)//實現pos演算法

//定義區塊

type block struct

//建立區塊鏈,陣列

var blockchain block

//生成新的區塊

//address是礦工位址

func generatenextblock(oldblock block, bpm int, address string) block

//計算雜湊

func generatehashvalue(block block) string

//網路上的全節點

type node struct

//存放幾個節點,有幾個使用者在參與

var n [2] node

//用於記錄挖礦位址

var addr [6000] string

func main()

n[1] = node

//以下為pos共識演算法

var count = 0

//外出迴圈節點個數

for i := 0; i < len(n); i++

} //設定隨機種子

rand.seed(time.now().unix())

//通過隨機值[0,6000)

var rd = rand.intn(6000)

//隨機選礦工

var adds = addr[rd]

//建立創世區塊

var firstblock block

firstblock.bpm = 100

firstblock.prevhash = "0"

firstblock.timestamp = time.now().string()

firstblock.validator = "abc123"

firstblock.index = 1

firstblock.hashcode = generatehashvalue(firstblock)

//將區塊加到區塊鏈

//第二個區塊

//讓adds

var secondblock = generatenextblock(firstblock, 200, adds)

fmt.println(blockchain)

}

優點

節能,不需要耗費太多電力和資源

更加去中心化,51%算力+51%貨幣量才可以攻破

避免通貨緊縮

缺點

純pos機制,通過ipo方法發行,導致少數人獲得大量成本低的貨幣

pos信用基礎不牢固

POS權益證明

proof of stake,權益證明,是即將在以太坊中使用的共識機制。與pow不同的是,pos用幣齡的概念替換了pow中算力的概念,幣齡即持有的貨幣數量與持有時間的乘積,單個節點的幣齡越大,則其越容易找到滿足難度目標的隨機值,從而獲得記賬權。pos避免了pow中的資源消耗,縮短了共識達成的時間,但...

DPoS 股份授權證明 go簡單實現

dpos 即 delegated proof of stake 譯為股份授權證明 最早於 2013 年由 bitshares 提出,目的為解決 pow 和 pos 機制的不足 dpos 機制的加密貨幣,每個節點都可以操作區塊,並按照個人的持股比例獲得 利 息 dpos 是由被社群選舉的可信帳戶 受託...

PoW 工作量證明 go實現

proof of work 簡稱 pow,即為工作量證明 通過計算乙個數值,使得拼揍上交易資料後內容的值滿足規定的上限,在節點成功 找到滿足的 hash 值之後,會馬上對全網進行廣播打包區塊,網路的節點收到廣播 打包區塊,會立刻對其進行驗證 網路中只有最快解密的區塊,才會新增的賬本中,其他的節點進行...