既然前面已經把區塊的基本架構寫好惹,我們就來把它串成鏈吧~
type Blockchain struct {
Blocks []*Block
}
func (blockchain *Blockchain) AddBlock(Data [] byte) {
PrevBlock := blockchain.Blocks[len(blockchain.Blocks) - 1] // 取出前一個 Block
NewBlock := CreateBlock(Data, PrevBlock.Hash) // 創建 Block
blockchain.Blocks = append(blockchain.Blocks, NewBlock) // 把新創建的 Block 接上去
}
func CreateGenesisBlock() *Block {
return CreateBlock([]byte("Genesis Block"), []byte{})
}
func CreateBlockchain() *Blockchain {
return &Blockchain{[] *Block{CreateGenesisBlock()}}
}
我做的是一個能夠新增區塊、查詢區塊的檔案
以下是我的 main.go
package main
import (
"fmt"
"bufio"
"os"
bc "mypackage/blockchain"
)
func Help() {
fmt.Println("There are 3 operations:")
fmt.Println("Type 1 for adding a new Block")
fmt.Println("Type 2 for printing the Blockchain")
fmt.Println("Type 3 for exiting")
}
func main() {
fmt.Println("Welcome to our Blockchain project.")
fmt.Println("Enter h for help")
var (
op string
)
NewBlockchain := bc.CreateBlockchain() // 新增一個區塊鏈
for true {
fmt.Scanln(&op)
if op == "h" {
fmt.Println("Printing the help")
Help() // 顯示使用方法
} else if op == "1" {
fmt.Println("Entering your data:")
reader := bufio.NewReader(os.Stdin)
data, _, _:= reader.ReadLine() // 讀一整行 input
NewBlockchain.AddBlock(data) // 利用 input 作為 data 來創建區塊鏈
} else if op == "2"{
for _ , block := range NewBlockchain.Blocks {
fmt.Printf("Prev. hash: %x\n", block.PrevBlockHash)
fmt.Printf("Data: %s\n", block.Data)
fmt.Printf("Hash: %x\n", block.Hash)
fmt.Println()
} // 查詢資料
} else if op == "3"{
break
} else {
fmt.Println("Please Enter h, 1, 2, 3")
}
}
}
請問一下,bc "mypackage/blockchain"是什麼?
是一個可以下載的封包嗎?還是....
因為我使用vscode寫入時,vscode讀不出來
很抱歉有點晚才回覆你~
這是 golang import 比較不同的地方
在 python 中 import 只要是同資料夾就可以直接 import
但是在 golang 中會以你的 GOPATH. 底下的 src 當起始路徑
換句話說,你要把檔案搬到你的 GOPATH/src 再 import 它
至於 import bc 'mypackage/blockchain' 其實就等同於 python 的 import ... as bc
詳細可以參考 : https://openhome.cc/Gossip/Go/Package.html
不好意思打擾了~
想詢問一下上鏈的部分,是利用哪一種鏈,公有、私有還是聯盟
因為第一次學所以比較不懂不好意思
這裡都是公有鏈喔~因為任何人都可以知道鏈上的資訊