(一)默克爾樹
(二)默克爾根(一)只有唯一一次鑄幣交易
只有唯一一筆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.區塊鏈解決了啥問題 乙個東西有價值,一定是解決了乙個社會上的痛點。我們說人工智慧是未來的趨勢,因為它主要解決的是生產力的公升級問題,工業革命代替人的簡單體力勞動,人工智慧代替的是例如思考之類的複雜勞動。區塊鏈解決的是生產關係的問題,也就是信任的問題,想一下為什麼 需要有支付寶,因為如果沒拿到貨而...