《區塊鏈寶典》位元幣默克爾根生成演算法及原理

2021-10-03 07:27:26 字數 1751 閱讀 6002

(一)默克爾樹

(二)默克爾根(一)只有唯一一次鑄幣交易

只有唯一一筆coinbase交易的hash就是默克爾根的hash值

(二)默克爾根的生成步驟

將每乙個葉子節點下的分支節點進行兩兩hash,之後大小端顛倒然後拼接到一起,拼接好的資料進行雜湊運算,之後在進行一次大小端顛倒

**如下

package main

import

("crypto/sha256"

"encoding/hex"

"fmt"

)//當前區塊下交易交易的hash

var txhashlist =

string

func main (

)type merklenode struct

type merkletree struct

func

newmerklenode

(left,right *merklenode,data [

]byte

)*merklenode

else

return mnode

}func

newmerkletree

(datalist [

]byte

)*merkletree

j :=

0//生成分支節點

for nsize :=

len(datalist)

; nsize >

1; nsize =

(nsize +1)

/2j += nsize

}return

&merkletree

}func

min(a,b int

)int

else

}func

generamerkleroot

(txlist [

]string

)string

for_

,value :=

range txlist

//將二維陣列作為引數,通過newmerkletree()函式進行兩兩雜湊處理

hashedbytes :=

newmerkletree

(txslice)

.node.data

//大小端顛倒後轉為字串

return

reversebytestostring

(hashedbytes)

}/**

位元組陣列大小端顛倒

*/func

reversebytes

(data [

]byte)}

/**將16進製制字串進行大小端顛倒

*/func

revershexstringtobytes

(hexstring string)[

]byte

/**位元組陣列大端和小端進行顛倒,轉成字串

*/func

reversebytestostring

(bytes [

]byte

)string

當前案例以區塊98901為例,計算出的默克爾根如下

區塊鏈 默克爾樹 Merkle Tree

merkle tree 也被成為 hash tree,見名思意,這種樹其實就是用來儲存 hash 值的一種樹。關於hash我們在之前的文章已經說過了,對於乙個輸入,都有乙個唯一的長度的固定的輸出,且以我們目前的科技狀況,無法找到兩個不同的輸入使得輸出一樣。簡單來說就是 y h x y h x 我們無...

位元幣 區塊鏈

區塊鏈 一種實時記錄全部交易的去中心化公開資料 庫,在區塊鏈上進行支付時全網計算機共同查詢區塊鏈資料,共同驗證這筆支付交易是否有效。確認支付後將寫入區塊鏈並產生一條不可篡改記錄。區塊 區塊大小是1m,包含父雜湊 merkle根 時間戳 難度目標 隨機數。程式上近似每10分鐘增加乙個block,blo...

區塊鏈和位元幣

1.區塊鏈解決了啥問題 乙個東西有價值,一定是解決了乙個社會上的痛點。我們說人工智慧是未來的趨勢,因為它主要解決的是生產力的公升級問題,工業革命代替人的簡單體力勞動,人工智慧代替的是例如思考之類的複雜勞動。區塊鏈解決的是生產關係的問題,也就是信任的問題,想一下為什麼 需要有支付寶,因為如果沒拿到貨而...