Go語言構建自己的區塊鏈

2021-09-09 02:11:37 字數 1525 閱讀 9660

區塊:block.go 

package core

import (

"crypto/sha256"

"encoding/hex"

"time"

)//區塊結構

type block struct

//計算雜湊值

func calculatehash(b block)string

//生成新的區塊

func generatenewblock(preblock block ,data string) block

newblock.index = preblock.index+1

newblock.timestap=time.now().unix()

newblock.prevblockhash=preblock.hash

newblock.hash=calculatehash(newblock)

newblock.data=data

return newblock

}//生成第乙個區塊

func generategenesisblock() block

preblock.index=-1

preblock.hash=""

return generatenewblock(preblock,"genesis block")

}

區塊鏈:blockchain.go

package core

import "fmt"

type blockchain struct

//新建一條區塊鏈

func newblockchain() *blockchain

return &blockchain

}//傳送一條資料即新增乙個區塊

func (bc *blockchain)sentdata(data string)

//增加區塊

if len(bc.blocks)==0

if bc.isvalid(*block,*bc.blocks[len(bc.blocks)-1])

}//列印區塊資訊

func (bc *blockchain)print()

}//判斷區塊是否有效

func (bc *blockchain)isvalid(newblock block,oldblock block)bool

if (oldblock.hash)!=newblock.prevblockhash

fmt.println(calculatehash(newblock))

fmt.println(newblock.hash)

/*if calculatehash(newblock)!=newblock.hash*/

return true

}

簡單測試:main

package main

import "core"

func main()

Go語言實現區塊鏈(一)

區塊鏈是由乙個個的區塊所組成。我們把第乙個區塊稱之為 創世塊 創世塊與其他普通區塊不一樣的是,創世塊沒有前置雜湊。下面我們定義乙個結構體儲存創世塊的資訊。1 定義區塊結構體 定義區塊 type block struct 2 提供建立方法 建立方法 引數一 區塊資料 引數二 前置區塊的雜湊 func ...

區塊鏈基礎語言(十一) Go語言迴圈語句

與多數語言不同的是,go語言中的迴圈語句只支援for關鍵字,不支援while和do while。go語言迴圈處理語句主要包含 for迴圈語句 for迴圈巢狀語句。1.1 形式一 1.1.1 語法格式 注 a.init 一般賦值表示式,給控制變數賦初值 b.condition 關係表示式或邏輯表示式,...

區塊鏈基礎語言(十二) Go語言跳轉語句

go語言跳轉語句對應的關鍵字是goto。在具體應用場景中,為滿足更豐富的控制需求,go語言提供了關鍵字break和continue。根據具體的邏輯目標 程式執行時間和空間限制 的可讀性 編譯器的 優化設定等因素,開發者可以結合具體情況對這些關鍵字進行靈活組合。goto語句,就是無條件的跳轉到本函式內...