声明一下。这里所说的哈希指针不是指向前一个区块的哈希指针!
老师说全节点在收到一个交易记录的时候首先会根据 UTXO 去检查输入方的比特币来源。比如下面这个交易。在审查 B->C 交易的时候要根据 B 提供的哈希指针去验证 B 的比特别来源。如果发现在发起 B->C 交易之前,B 已经将比特币转给 D 了。那么就认为这是“双花”或者说“透支” ,则会拒绝将 B->C 交易打包!
关于这个流程我有两个疑问:
1 、老师给出的例子是 A->B 5 个比特币(假设 B 只有 5 个比特币)。然后 B->D 5 个比特币。最后 B->C 5 个比特币。根据交易记录的哈希指针可以发现 B->D 的交易。 -----这我就不明白了。如下图:既然 B->C 的 Vout 哈希指针指向的是 B 作为输出角色(收款方)的那一笔交易记录。那么如何根据这个哈希指针发现 B->D 的交易记录呢? B->D 的交易,B 作为输入也会有一个哈希指针指向 A->B 的交易的输出方。但是 B->C 的交易去向 A->B 的 vout 查询时如何能发现 B->D 的交易呢?
2 、假设 B->D 的交易确实发生了。但是金额只有 2 个比特币。那么 B 此时剩余 3 个比特币。在假设第三笔交易 B->C 的交易额是 3 个比特币。那么交易应该是合法的。但是全节点如何通过这些哈希指针完成定量审核的呢?
1
Adelell 303 天前
BTC 使用点对点分布式时间戳服务器为基于时间的交易序列生成计算上的证据来解决双重支付问题。
https://bitcoin.org/files/bitcoin-paper/bitcoin_zh_cn.pdf 再看一遍白皮书吧。 |
2
dhb233 303 天前
看起来比特币没有提供什么快速的查找方式。可能数据量还不算太大,遍历就能找到 B->D 的交易?或者那些节点可以自己创建每个钱包的缓存,只记录钱包可用的 UTXO 。
第二个,我记得一次交易可以分拆多个接收方。5 个币,可以 3 个给 D ,2 个给自己。 |
3
xx6412223 294 天前
建议你学习:比特币数据结构
数据从属关系: chain - block- transaction - output 你所的验证本质就是基础的数据遍历过程,当然会做缓存,并在每次产生新区块后更新缓存 |