zoukankan      html  css  js  c++  java
  • 构建命令行式交易区块链应用

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

    几个数据结构

    区块结构:

    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

  • 相关阅读:
    Redis其他知识
    Mybatis的sql语句操作
    Redis
    mybatis插件原理
    mybatis工作原理
    Mybatis逆向工程
    mybatis缓存机制
    Mybatis查询
    zabbix api添加主机
    jenkins + bitbucket 实现 pr自动构建及build状态通知
  • 原文地址:https://www.cnblogs.com/whiteBear/p/15640630.html
Copyright © 2011-2022 走看看