在it界,2018最火的熱詞相必就是區塊鏈了,c++和go是目前最適合區塊鏈開發的兩種語言,所以咱們學go的肯定得學一點區塊鏈的知識,但是區塊鏈涉及太多密碼學,金融學、p2p網路等知識了,從**切入呢,今天我們就從用go實現一條帶有模擬挖礦系統的簡單區塊鏈。
三大模組
**還是比較簡單清晰的,主要有三個模組,block模組、blockchain模組、pow模組即挖礦模組。
執行流程
有了大概的執行流程接下來再來看**就會輕鬆很多了。
package main
import
("math/big"
"bytes"
"encoding/binary"
"crypto/sha256"
"fmt"
"time"
)//block模組
type block struct
//給到乙個建立新區塊的方法
func
newblock
(data,prehash [
]byte
)*block
, timestamp:time.
now().
format
("2006-15:04:05"),
difficulty:difficulty,
data:data,
prevblockhash:prehash,
}//需要被挖礦之後才能建立區塊,所以呼叫挖礦函式
pow:=
newpow
(&block)
nonce,hash:=pow.
mine()
//挖礦結束,得到雜湊碰撞值
block.nonce=nonce
block.hash=hash
return
&block
}//blockchain模組
const gnnesinfo=
"2023年9月2日,一代偉人誕生了"
//給到乙個區塊鏈結構
type blockchain struct
//將創世區塊加入區塊鏈,並返回一條可供操作的區塊鏈
func
newblockchain()
*blockchain
) bc.blocks=
(bc.blocks,block)
return
&bc}
//給到乙個增加區塊的方法
func
(this *blockchain)
addblock
(data [
]byte
)//遍歷,列印所有
func
(this *blockchain)
printall()
}//pow挖礦模組
const difficulty=
24//pow挖礦結構需要兩個引數,乙個是所需挖礦的區塊,另乙個是挖礦成功所需目標數字
type proofofwork struct
//給到乙個根據難度值得到雜湊碰撞目標值的函式
func
gettargetint()
*big.int
//建立挖礦的方法
func
newpow
(block *block)
*proofofwork
//乙個用來將uint64轉化為字元切片的小函式,方便接下來的轉化
func
uint2byte
(num uint64)[
]byte
//挖礦的準備工作,將其他字元組合起來之後求其雜湊值
func
(pow *proofofwork)
preparetomine
(nonce uint64)[
]byte
allinfo:=bytes.
join
(info,
byte
) hash:=sha256.
sum256
(allinfo)
return hash[:]
}//pow挖礦方法,返回兩個引數,乙個是碰撞成功的數字nonce,另乙個是當前區塊雜湊值
func
(pow *proofofwork)
mine()
(uint64,[
]byte
)//不小於則繼續窮舉
nonce++
}return nonce,hash
}//呼叫
func
main()
以上就是乙個微型的區塊鏈了,雖然看起來很簡單,但是對於理解位元幣、區塊鏈還是有不少幫助的。
若是感興趣或者不屑一顧的大牛們可以戳我的githubgo語言實現位元幣系統,是這個小區塊鏈的公升級版本,並且將持續維護更新,加入了命令列功能、utxo轉賬機制,bolt資料庫儲存、錢包等,更加接近真正的位元幣系統
Go語言實現區塊鏈挖礦基於POW共識
注釋都已經標註上了 如下 package main import time strconv crypto sha256 encoding hex fmt strings 通過 實現pow挖礦 定義區塊 type block struct 第乙個區塊 創世區塊 func generatefirstbl...
區塊鏈的簡單實現
最近在學習區塊鏈的相關知識,在懂得原理後通過程式設計實現了乙個簡單的區塊鏈程式,希望對以後的學習有所增益,在這裡要感謝b站up主 是落拓呀 的對於區塊鏈的詳細講解,下面附上相關python import hashlib import json from typing import text 區塊 c...
區塊鏈 PoW 共識機制的原理與認識
有效可靠 因為雜湊函式具有免碰撞 隱匿性以及不存在比窮舉更好地方法來使得雜湊值落在特定的範圍。利用時間戳 非對稱加密 雜湊函式以及共識機制解決了拜占庭將軍的問題。實現了去中心化 pow 的共識機制解決了去中心化結構中各個節點間資料不一致的問題。同時這一機制保證了在這個系統中每乙個節點的公平性,即每乙...