Golang語言和區塊鏈理論學習完畢後,快速入門方法無疑是項目實戰。本文將參考https://jeiwan.cc/tags/blockchain/教程,學習如何基於Go語言構建區塊鏈。安全
本文爲原文第4部分學習筆記,該部分主要是實現blockchain的交易信息。交易是比特幣的核心,而blockchain的惟一目的就是安全可靠地存儲交易信息,確保建立交易後,沒人能夠修改該交易信息。 實現過程和說明可參見原文,本文主要描述實現後的命令行交互過程。學習
代碼實現後,要想在命令行調用,最好先編譯該項目。進入項目路徑D:\go\src\Blockchain,輸入如下命令:
區塊鏈
D:\go\src\Blockchain>go build
可看到項目路徑內生成Blockchain.exe的編譯文件。ui
接下來可按照 cli.go 中定義的命令信息,輸入相關命令。spa
使用Ivan建立一個blockchain: 命令行
D:\go\src\Blockchain4>Blockchain4 createblockchain -address Ivan 00073ce6c344d91351e9d49bba55472654591b5b4ebcb70c5c70d94fddb39c0c Done!
查看Ivan 帳戶餘額:3d
D:\go\src\Blockchain4>Blockchain4 getbalance -address Ivan Balance of 'Ivan': 10
再嘗試進行一些交易:
blog
D:\go\src\Blockchain4>Blockchain4 send -from Ivan -to Pedro -amount 6 000f22d22301684ab62eef839cd9b0a5f6fae1acde730c9e9fb113fd088fe1d9 Success! D:\go\src\Blockchain4>Blockchain4 getbalance -address Ivan Balance of 'Ivan': 4 D:\go\src\Blockchain4>Blockchain4 getbalance -address Pedro Balance of 'Pedro': 6 D:\go\src\Blockchain4>Blockchain4 send -from Pedro -to Helen -amount 2 000df67188c14e1d101e0abc2a3f4bbacc74ef913d2521106533347ffeb093ca Success! D:\go\src\Blockchain4>Blockchain4 send -from Ivan -to Helen -amount 2 000c33a5e42c8693f6934a4dd3e4d933b32cfeeccd9435d93f83a12c36608ea8 Success! D:\go\src\Blockchain4>Blockchain4 send -from Helen -to Rachel -amount 3 000e499dc07fce475cde7cbac1c0e9178aaf1b00bf2c8a622c05b2accdd41ad1 Success! D:\go\src\Blockchain4>Blockchain4 getbalance -address Ivan Balance of 'Ivan': 2 D:\go\src\Blockchain4>Blockchain4 getbalance -address Pedro Balance of 'Pedro': 4 D:\go\src\Blockchain4>Blockchain4 getbalance -address Helen Balance of 'Helen': 1 D:\go\src\Blockchain4>Blockchain4 getbalance -address Rachel Balance of 'Rachel': 3
嘗試一種異常狀況:Pedro給Ivan5元,可是Pedro只有4元,消費失敗。交易失敗前後,Pedro和Ivan的餘額未發生變化。 教程
D:\go\src\Blockchain4>Blockchain4 send -from Pedro -to Ivan -amount 5 2018/03/14 20:09:13 ERROR: Not enough funds panic: ERROR: Not enough funds goroutine 1 [running]: log.Panic(0xc042065d18, 0x1, 0x1) C:/Go/src/log/log.go:326 +0xc7 main.NewUTXOTransaction(0xc04200e100, 0x5, 0xc04200e120, 0x4, 0x5, 0xc042002e20, 0xc042065e70) D:/go/src/Blockchain4/transaction.go:85 +0x789 main.(*CLI).send(0xc042065f70, 0xc04200e100, 0x5, 0xc04200e120, 0x4, 0x5) D:/go/src/Blockchain4/cli.go:75 +0xc2 main.(*CLI).Run(0xc042065f70) D:/go/src/Blockchain4/cli.go:147 +0x4ae main.main() D:/go/src/Blockchain4/main.go:5 +0x32 D:\go\src\Blockchain4>Blockchain4 getbalance -address Pedro Balance of 'Pedro': 4 D:\go\src\Blockchain4>Blockchain4 getbalance -address Ivan Balance of 'Ivan': 2