Go語言實現區塊鏈(一)

2021-09-20 03:14:51 字數 2294 閱讀 2578

區塊鏈是由乙個個的區塊所組成。我們把第乙個區塊稱之為「創世塊」。創世塊與其他普通區塊不一樣的是,創世塊沒有前置雜湊。下面我們定義乙個結構體儲存創世塊的資訊。

(1)定義區塊結構體

// 定義區塊

type block struct

(2)提供建立方法

// 建立方法

// 引數一:區塊資料

// 引數二:前置區塊的雜湊

func newblock(data byte, prevhash byte) *block

block.sethash()

return &block

}

(3)生成雜湊

// 設定區塊雜湊

func (block *block) sethash()

blockinfo := bytes.join(tmp, byte{})

// 2.使用sha256加密

hash := sha256.sum256(blockinfo)

block.hash = hash[:]

}

(4)列印區塊

const genesisinfo = "the times 03/jan/2009 chancellor on brink of second bailout for banks"

func main() )

fmt.printf("prehash : %x\n", block.prevhash)

fmt.printf("hash : %x\n", block.hash)

fmt.printf("data : %s\n", block.data)

}

(1)引入區塊鏈結構

type blockchain struct
(2)提供建立方法

const genesisinfo = "the times 03/jan/2009 chancellor on brink of second bailout for banks"

// 建立方法

func newblockchain() *blockchain )

// 建立blockchain

bc := blockchain}

return &bc

}

(3)改寫main方法

func main()  

}

(4)實現addblock方法

// 新增區塊

func (bc *blockchain) addblock(data string)

(5)改寫main方法

func main()  

}

(1)補充block欄位

// 定義區塊

type block struct

(2)改寫newblock方法

// 建立方法

func newblock(data byte, prevhash byte) *block ,

timestamp: uint64(time.now().unix()),

difficulty: 1,

nonce: 1,

data: byte(data)}

//提供乙個設定雜湊的方法

block.sethash()

return &block

}

(3)重寫sethash方法

// 設定區塊雜湊

func (block *block) sethash()

blockinfo := bytes.join(tmp, byte{})

// 2.使用sha256加密

hash := sha256.sum256(blockinfo)

block.hash = hash[:]

}

(4)提供uint64tobyte方法

// 把uint64轉換成位元組陣列

func uint64tobyte(num uint64) byte

return buffer.bytes()

}

(5)改寫main方法

func main()  

}

Go語言實現區塊鏈挖礦基於POW共識

注釋都已經標註上了 如下 package main import time strconv crypto sha256 encoding hex fmt strings 通過 實現pow挖礦 定義區塊 type block struct 第乙個區塊 創世區塊 func generatefirstbl...

Go語言實現kmp演算法(一)

kmp演算法分為兩部分,第一部分為next陣列的獲取,第二部分為使用next陣列進行匹配,兩部分採用的思路大體相同。該演算法有多種方式實現,此處介紹移動的方式實現,還有教科書上的手算方法實現,即計算最大前後子串長度,將next陣列向後一位,首位置為 1,則匹配過程中移動距離等於 當前index in...

Go語言實現Valid Parentheses

write a function called that takes a string of parentheses,and determines if the order of the parentheses is valid.the function should return true if ...