ブロックチェーン共通チェーンコード
1776 ワード
ブロックチェーン
新しいblock
hash計算
世紀をつくる
ブロックチェーンの定義
ブロックの追加
新規ブロックの作成
しゅかんすう
type Block struct {
Index int64
TimeStamp int64
Data []byte
PrevBlockHash []byte
Hash []byte
}
新しいblock
func NewBlock(index int64,data ,prevBlockHash []byte) *Block {
block :=&Block{index,time.Now().Unix(),data,prevBlockHash,[]byte{}}
block.setHash() // Hash
return block
}
hash計算
func (b *Block)setHash() {
timestamp :=[]byte(strconv.FormatInt(b.TimeStamp,10))
index := []byte(strconv.FormatInt(b.Index,10))
headers :=bytes.Join([][]byte{timestamp,index,b.PrevBlockHash},[]byte{})
hash:=sha256.Sum256(headers)
b.Hash =hash[:] // Hash Hash
}
世紀をつくる
func NewGenesisBlock() *Block {
return NewBlock(0,[]byte("first block"),[]byte{})
}
ブロックチェーンの定義
type Blockchain struct {
blocks []*Block
}
ブロックの追加
func NewBlockchain()*Blockchain {
return &Blockchain{[]*Block{NewGenesisBlock()}}
}
新規ブロックの作成
func (bc *Blockchain)AddBlock(data string) {
prevBlock :=bc.blocks[len(bc.blocks)-1]
newBlock :=NewBlock(prevBlock.Index+1,[]byte(data),prevBlock.Hash)
bc.blocks =append(bc.blocks,newBlock)
}
しゅかんすう
func main(){
bc :=NewBlockchain()
bc.AddBlock("Joy send 1 BTC to Jay")
bc.AddBlock("Jakc sent 2 BTC to Jay")
for _,block := range bc.blocks{
fmt.Printf("Index :%d
" ,block.Index)
fmt.Printf("TimeStamp: %d
",block.TimeStamp)
fmt.Printf("Data: %s
",block.Data)
fmt.Printf("PrevHash: %x
",block.PrevBlockHash)
fmt.Printf("Hash: %x
",block.Hash)
fmt.Println("_____________________________")
}
}