版权声明:未经本人同意不能转载。可联系 ( [email protected] ) https://blog.csdn.net/jaryn_fang/article/details/90205227
交易的传播验证
- 交易包含两个部分,n输入和m输出,n>=0,m>0。(挖矿时n=0)
- 输入==要花费的UTXO+解锁脚本
- 输出==UTXO(币值+锁定脚本)
- 钱包软件生成交易,并向临近节点传播
- 节点对收到的交易进行验证,并丢弃不合法交易
- 交易的size要小于区块size的上限
- 交易输入的UTXO是存在的
- 交易输入UTXO没有被其他交易引用-防止双花(Double Spending)
- 输入总金额 > 输出总金额
- 解锁脚本验证
- 将合法的交易加入到本地的Transaction数据库中,并将合法交易转给临近的节点
区块的生成
区块的验证链接
- 相邻节点收到新区块后,立即做一下检查
- 验证POW的nonce值是否符合难度值
- 检查时间戳是否小于当前时间2小时
- 检查Merkle树根是否正确
- 检查区块size要小于区块size的上限
- 第一笔交易必须是coinbase交易
- 验证每个交易
- 源代码:http://btc.yt/lxr/satoshi/ident?_i=CheckBlock
Merkle Tree