Golang语言和区块链理论学习完毕后,快速入门方法无疑是项目实战。本文将参考https://jeiwan.cc/tags/blockchain/教程,学习如何基于Go语言构建区块链。
1、引言
本文为原文第4部分学习笔记,该部分主要是实现blockchain的交易信息。交易是比特币的核心,而blockchain的唯一目的就是安全可靠地存储交易信息,确保创建交易后,没人可以修改该交易信息。 实现过程和说明可参见原文,本文主要描述实现后的命令行交互过程。
2、Blockchain编译及调用
代码实现后,要想在命令行调用,最好先编译该项目。进入项目路径D:\go\src\Blockchain,输入以下命令:
D:\go\src\Blockchain>go build
可看到项目路径内生成Blockchain.exe的编译文件。
接下来可按照 cli.go 中定义的命令信息,输入相关命令。
使用Ivan创建一个blockchain:
D:\go\src\Blockchain4>Blockchain4 createblockchain -address Ivan00073ce6c344d91351e9d49bba55472654591b5b4ebcb70c5c70d94fddb39c0cDone!
查看Ivan 账户余额:
D:\go\src\Blockchain4>Blockchain4 getbalance -address IvanBalance of 'Ivan': 10
再尝试进行一些交易:
D:\go\src\Blockchain4>Blockchain4 send -from Ivan -to Pedro -amount 6000f22d22301684ab62eef839cd9b0a5f6fae1acde730c9e9fb113fd088fe1d9Success!D:\go\src\Blockchain4>Blockchain4 getbalance -address IvanBalance of 'Ivan': 4D:\go\src\Blockchain4>Blockchain4 getbalance -address PedroBalance of 'Pedro': 6D:\go\src\Blockchain4>Blockchain4 send -from Pedro -to Helen -amount 2000df67188c14e1d101e0abc2a3f4bbacc74ef913d2521106533347ffeb093caSuccess!D:\go\src\Blockchain4>Blockchain4 send -from Ivan -to Helen -amount 2000c33a5e42c8693f6934a4dd3e4d933b32cfeeccd9435d93f83a12c36608ea8Success!D:\go\src\Blockchain4>Blockchain4 send -from Helen -to Rachel -amount 3000e499dc07fce475cde7cbac1c0e9178aaf1b00bf2c8a622c05b2accdd41ad1Success!D:\go\src\Blockchain4>Blockchain4 getbalance -address IvanBalance of 'Ivan': 2D:\go\src\Blockchain4>Blockchain4 getbalance -address PedroBalance of 'Pedro': 4D:\go\src\Blockchain4>Blockchain4 getbalance -address HelenBalance of 'Helen': 1D:\go\src\Blockchain4>Blockchain4 getbalance -address RachelBalance of 'Rachel': 3
尝试一种异常情况:Pedro给Ivan5元,但是Pedro只有4元,消费失败。交易失败前后,Pedro和Ivan的余额未发生变化。
D:\go\src\Blockchain4>Blockchain4 send -from Pedro -to Ivan -amount 52018/03/14 20:09:13 ERROR: Not enough fundspanic: ERROR: Not enough fundsgoroutine 1 [running]:log.Panic(0xc042065d18, 0x1, 0x1) C:/Go/src/log/log.go:326 +0xc7main.NewUTXOTransaction(0xc04200e100, 0x5, 0xc04200e120, 0x4, 0x5, 0xc042002e20, 0xc042065e70) D:/go/src/Blockchain4/transaction.go:85 +0x789main.(*CLI).send(0xc042065f70, 0xc04200e100, 0x5, 0xc04200e120, 0x4, 0x5) D:/go/src/Blockchain4/cli.go:75 +0xc2main.(*CLI).Run(0xc042065f70) D:/go/src/Blockchain4/cli.go:147 +0x4aemain.main() D:/go/src/Blockchain4/main.go:5 +0x32D:\go\src\Blockchain4>Blockchain4 getbalance -address PedroBalance of 'Pedro': 4D:\go\src\Blockchain4>Blockchain4 getbalance -address IvanBalance of 'Ivan': 2