基础数据结构

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函数用于发送币。