区块链核心代码3
基础数据结构
1. 交易结构
定义交易结构体,包含:
- id
- TXInput
- TXOutput
2. 交易输出结构
定义TXOutput结构体,内部有:
- value(单位是satoshi,一聪,btc最小单位)
- ScriptPubKey(锁定脚本,对方地址/公钥)
注:value表示代金券上的金额,锁定脚本即代金券的使用规则,满足了才可以用。
3. 交易输入结构
定义TXInput结构体,内部有:
- TXid(代金券编号)
- Vout(输出索引)
- ScriptSip(解锁脚本)
注:
- Vout是用来告诉系统上次交易的使用输出,也是告诉商店要用哪张代金券(本次输入)
- 本次输入是之前的输出,除了新块,否则都要引用之前的输出,故其实没有被引用的输出就是余额
功能实现
4. 创世交易
定义创世区块的TX函数,这个没有前vin,只有输出,也没有解锁脚本(为空)。
5. 区块结构修改
修改block结构体的成员,把data换成Transactions函数。
6. 代码适配
把之前一切关于data的代码进行修改换成transaction,同时修改创建区块链的函数,这个函数会接收一个address给创世矿工,且之前的工作量证明需要把data换成TX。
7. 余额查询基础
定义能否解锁和锁定输入输出的函数(这里只是简单查询一下是否是自己的密钥)。
8. 未花费输出查询
定义FindUnspentTransactions函数,创建哈希表存储所有已花费的输出(就是每个后vin对应的前vout),那些没有后面vin的vout就是余额。
9. 余额计算
定义getbalance函数,用于把Find函数找出来的UTXOs(未交易输出)合并起来算除余额。
10. 交易生成
定义NewUTXOTransaction用于生成交易信息。
11. 可用输出查询
定义FindSpendableOutputs,找到未花费的金额,并且确保金额足够。
12. 转账功能
定义send函数用于发送币。
评论