基于Go语言构建区块链:part4 1、引言 2、Blockchain编译及调用

Golang语言和区块链理论学习完毕后,快速入门方法无疑是项目实战。本文将参考https://jeiwan.cc/tags/blockchain/教程,学习如何基于Go语言构建区块链。

本文为原文第4部分学习笔记,该部分主要是实现blockchain的交易信息。交易是比特币的核心,而blockchain的唯一目的就是安全可靠地存储交易信息,确保创建交易后,没人可以修改该交易信息。 实现过程和说明可参见原文,本文主要描述实现后的命令行交互过程。

2、Blockchain编译及调用

代码实现后,要想在命令行调用,最好先编译该项目。进入项目路径D:gosrcBlockchain,输入以下命令:

D:gosrcBlockchain>go build  

 可看到项目路径内生成Blockchain.exe的编译文件。

接下来可按照 cli.go 中定义的命令信息,输入相关命令。

使用Ivan创建一个blockchain: 

D:gosrcBlockchain4>Blockchain4 createblockchain -address Ivan
00073ce6c344d91351e9d49bba55472654591b5b4ebcb70c5c70d94fddb39c0c

Done!

  

查看Ivan 账户余额:

D:gosrcBlockchain4>Blockchain4 getbalance -address Ivan
Balance of 'Ivan': 10

  

  

 再尝试进行一些交易:

D:gosrcBlockchain4>Blockchain4 send -from Ivan -to Pedro -amount 6
000f22d22301684ab62eef839cd9b0a5f6fae1acde730c9e9fb113fd088fe1d9

Success!

D:gosrcBlockchain4>Blockchain4 getbalance -address Ivan
Balance of 'Ivan': 4

D:gosrcBlockchain4>Blockchain4 getbalance -address Pedro
Balance of 'Pedro': 6

D:gosrcBlockchain4>Blockchain4 send -from Pedro -to Helen -amount 2
000df67188c14e1d101e0abc2a3f4bbacc74ef913d2521106533347ffeb093ca

Success!

D:gosrcBlockchain4>Blockchain4 send -from Ivan -to Helen -amount 2
000c33a5e42c8693f6934a4dd3e4d933b32cfeeccd9435d93f83a12c36608ea8

Success!

D:gosrcBlockchain4>Blockchain4 send -from Helen -to Rachel -amount 3
000e499dc07fce475cde7cbac1c0e9178aaf1b00bf2c8a622c05b2accdd41ad1

Success!

D:gosrcBlockchain4>Blockchain4 getbalance -address Ivan
Balance of 'Ivan': 2

D:gosrcBlockchain4>Blockchain4 getbalance -address Pedro
Balance of 'Pedro': 4

D:gosrcBlockchain4>Blockchain4 getbalance -address Helen
Balance of 'Helen': 1

D:gosrcBlockchain4>Blockchain4 getbalance -address Rachel
Balance of 'Rachel': 3

  

尝试一种异常情况:PedroIvan5元,但是Pedro只有4元,消费失败。交易失败前后,PedroIvan的余额未发生变化。 

D:gosrcBlockchain4>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:gosrcBlockchain4>Blockchain4 getbalance -address Pedro
Balance of 'Pedro': 4

D:gosrcBlockchain4>Blockchain4 getbalance -address Ivan
Balance of 'Ivan': 2