共識演算法之Pow工作量證明演算法go語言實現

2021-10-09 04:45:43 字數 1879 閱讀 5664

pow演算法的簡介

pow演算法的代表性應用就是位元幣系統,pow演算法的原義是工作量證明演算法,故名思意就是幹多少活的證明。其實就是暴力求值,通過暴力迴圈 找到乙個合適的雜湊值,

這篇文中由詳細的介紹

package main

import

("crypto/sha256"

"encoding/hex"

"encoding/json"

"fmt"

"log"

"math/big"

"strconv"

"time"

)// 定義區塊鏈的結構

type block struct

// 簡單的鏈式結構

var blockchain [

]block

// 難度值

var diffnum uint=17

// 挖礦函式即工作量證明演算法

// 1.通過增大隨機數的值 尋找適合的雜湊值

// 2.模擬位元幣 尋找小於目標難度的雜湊值

// 工作量證明演算法的本質就是暴力求值 迴圈比較 直至找到符合要求的雜湊值

func

mine

(data string

) block

// 獲取鏈上的最後乙個區塊

lastblock := blockchain[

len(blockchain)-1

]// 定義乙個新的區塊

newblock :=

new(block)

newblock.lasthash = lastblock.hash

newblock.timestamp = time.

now().

string()

newblock.height = lastblock.height +

1 newblock.diffnum = diffnum

newblock.data = data

var nonce int64=0

newbigint := big.

newint(1

) newbigint.

lsh(newbigint,

256-diffnum)

// 相當於1 左移256-diffnum

// 暴力計算

for hashbytes,

_:= hex.

decodestring

(newblock.hash)

hashint.

setbytes

(hashbytes)

//將區塊雜湊值轉大數字

// 尋找合適的值

// 比較x和y的大小。xy時返回+1;否則返回0

if hashint.

cmp(newbigint)==-

1else

}return

*newblock

}//序列化

func

(b *block)

serialize()

byte

return bytes

}// 獲取本區塊的雜湊值

func

(b *block)

gethash()

func

main()

genesisblock.

gethash()

fmt.

println

(genesisblock)

//將創世區塊新增進區塊鏈

blockchain =

(blockchain,

*genesisblock)

for i :=

0; i <

10; i++

}

PoW 工作量證明 go實現

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

工作量證明(POW)和股權證明(POS)共識機制

一 pow proof of work 工作量證明機制。基本原理 第一代共識機制,位元幣的基礎。理解起來,很簡單,就是 按勞取酬 你付出多少工作量,就會獲得多少報酬 位元幣等加密貨幣 在網路世界裡,這裡的勞動就是你為網路提供的計算服務 算力x時長 提供這種服務的過程就是 挖礦 假如是真的礦場,顯然在...

區塊鏈共識演算法之POW

pow,proof of work,即工作量證明,是著名公鏈bitcoin所採用的共識演算法。那麼pow到底是什麼玩意呢?簡單來說,pow就是乙個證明,證明你確實做了一定量符合要求的工作。通常 這份工作 做起來有些難度,但是驗證方卻很容易通過結果來驗證是否做了相應的工作。一句話介紹下位元幣的pow到...