簡單區塊鏈的實現(帶POW挖礦系統)

2021-08-31 11:57:29 字數 2547 閱讀 8033

在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 的共識機制解決了去中心化結構中各個節點間資料不一致的問題。同時這一機制保證了在這個系統中每乙個節點的公平性,即每乙...