比特币通过“交易记录哈希指针”验证交易合法性的一个疑问!

72 天前
 huzhikuizainali

声明一下。这里所说的哈希指针不是指向前一个区块的哈希指针!

老师说全节点在收到一个交易记录的时候首先会根据 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 个比特币。那么交易应该是合法的。但是全节点如何通过这些哈希指针完成定量审核的呢?

623 次点击
所在节点    区块链
3 条回复
Adelell
72 天前
BTC 使用点对点分布式时间戳服务器为基于时间的交易序列生成计算上的证据来解决双重支付问题。

https://bitcoin.org/files/bitcoin-paper/bitcoin_zh_cn.pdf
再看一遍白皮书吧。
dhb233
72 天前
看起来比特币没有提供什么快速的查找方式。可能数据量还不算太大,遍历就能找到 B->D 的交易?或者那些节点可以自己创建每个钱包的缓存,只记录钱包可用的 UTXO 。

第二个,我记得一次交易可以分拆多个接收方。5 个币,可以 3 个给 D ,2 个给自己。
xx6412223
63 天前
建议你学习:比特币数据结构
数据从属关系:
chain - block- transaction - output
你所的验证本质就是基础的数据遍历过程,当然会做缓存,并在每次产生新区块后更新缓存

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1018694

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX