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