让我们考虑一下,我们有一个名为ABCCoin,ABC的AltCoin。 我将被称为X,开采了一个街区并获得了新鲜铸造的25 ABC作为采矿奖励。现在,我想给这个硬币一个朋友Y。因此,
Tx: X -> Y : 25ABC
并假设它存储在块B100中。现在几个月后,Y女士出于任何原因都希望将其转移到Z。所以,
Tx: Y -> Z : 25ABC
现在,几个月后。 Z先生想和女友约会时用星巴克买咖啡。
现在交易链如下:
|Tx|Minted -> X |
--> "Tx: X -> Y : 25ABC"
--> "Tx: Y -> Z : 25ABC"
--> "Tx: Z -> Starbucks : 25ABC"
因此,在这种情况下。当我们需要验证“ Tx:Z-> Starbucks:25ABC”时 我们是否必须追溯其起源,即追溯到铸造该硬币的时间,还是可以仅通过检查其直接来源来对其进行验证。即“ Tx:X-> Y:25ABC”,而不关心其他先前版本。
答案 0 :(得分:0)
假设您要问的是基于UTXO交易的区块链,如比特币。
有2种验证类型
全节点验证
SPV验证
完整节点是一个程序,可完全验证事务和块,例如bitcoind
,litecoind
或geth
。
因此,每当一个完整的节点收到来自其他对等方的新块时,它都会验证该块中的所有交易,并仅在该块完全有效的情况下才添加到其区块链并更新UTXO列表。
为验证交易,全节点检查类似
因为一个完整的节点都有一个它认为正确的UTXO列表,所以检查交易格式/签名和UTXO列表足以验证新交易。
SPV客户端没有完整的区块链数据,也没有UTXO列表,SPV仅使用MarkleTree检查交易是否在区块中,并且包含该交易的区块是否满足区块难度。这就是SPV可以检查的所有内容,因为它必须逐个检查所有块头和块体以创建UTXO列表。 因此,SPV无法检查是否是双重消费交易。 但是,因为只要区块链具有足够的难度,创建一个假块的成本很高,所以它是可用的验证。 就像评论中提到的@Haardik一样,在将来的更新中可能会获得可信任的UTXO列表而不使用markle树下载所有区块链数据