构建命令行式交易区块链应用


构建一个通过命令终端创建创世区块、转账交易以及查询等功能的区块链应用

几个数据结构

区块结构:

type Block struct {
	//时间戳,创建区块的时间
	TimeStamp int64
	//上个区块的hash
	PrevBlockHash []byte
	//Data 交易数据
	Transaction []*Transaction
	// Hash 当前区块的hash
	Hash []byte
	// Nonce随机数
	Nonce int
}

CLI交互结构

type CLI struct {
	BC *BlockChain
}
type BlockChain struct {
	Tip []byte   //区块链里最后一个区块的hash
	DB  *bolt.DB //数据库
}

查询暂存结构

//迭代器
func (blockchain *BlockChain) Iterator() *BlockchainIterator {
	return &BlockchainIterator{blockchain.Tip, blockchain.DB}
}

交易结构:

type Transaction struct {
	// 1、交易ID
	ID []byte
	// 2、交易输入
	Vin []TXInput
	// 3、交易输出
	Vout []TXOutput
}
// 交易输入
type TXInput struct {
	// 1、交易ID 上个区块的
	Txid []byte
	// 2、存储TXoutput在Vout里面的索引
	Vout int
	// 3、用户名 签名
	ScriptSig string
}

// 交易输出
type TXOutput struct {
	Value        int    //分
	ScriptPubKey string //
}

创建创世区块时序图

交易时序图

效果

帮助界面

查询效果图
1)某个账号的余额:(账号:maobuyi)

2)查询整个区块中的交易信息

转账

注: 执行转账命令如:./main send -from '["maobuyi"]' -to '["zhangjie"]' -amount '["4"]'

详细代码:https://github.com/NGLHarry/Blockchainer/tree/main/part16-addTransition2