如何验证一笔交易是不是双花,钱包如何判断你收的币是不是假的

资讯 8个月前 manoon
0

如何验证交易是否双花,钱包如何判断你收到的币是不是假币比特币如何交易,这是比特币(包括BTC和BCH)的首要设计目标。比特白皮书分别提供了双重支付的两种验证机制——比特币交易验证和支付验证。

交易验证只能由全节点完成,主要包括验证是否有足够的UTXO,是否有双花,以及判断解锁脚本。一次交易验证主要完成以下任务:

前提:区块链节点收到一笔交易,区块链节点同步所有区块,并在本地构建一个UTXO集合。

节点会遍历所有的UTXO集合,定位交易输入所在的区块高度,检查交易是否有足够的未花费输出(UTXO);

节点应该依次检查这个高度后面的所有交易比特币如何交易,确保这个UTXO没有双花;

节点需要验证本次交易的解锁脚本是否正确,从而验证交易的输入是否被合法的私钥解锁;

节点需要验证本次交易的锁定脚本是否正确,从而验证交易是否会被发送到非法地址

交易验证过程非常复杂。各种细节包括检查交易是否为coinbase交易;交易大小是否小于100K;交易指令是否少于20,000条;交易的各个领域是否合规。而且,各种交易格式,如p2pkh、p2sh等,都有自己的验证规则,过于复杂。不费一天功夫,估计没人能读懂交易验证码。

如何验证一笔交易是不是双花,钱包如何判断你收的币是不是假的

大多数用户一般不会运行完整的区块链节点,而是使用手机安装轻钱包。此类轻钱包无法实现交易验证功能。他们需要使用支付验证来确认他们收到的交易是否是假的。轻钱包被称为SPV钱包,英文是Simplified Payment Verification,简化了支付确认。

但是付款验证要简单得多。付款验证专为 SPV 钱包设计。支付验证的目标是让 SPV 钱包获取交易是否已经被区块链全节点收录到区块链中,即验证交易是否被打包,至多长链会做。

前提:SPV钱包节点收到一笔交易tx,SPV钱包节点已经下载了所有的区块头;

SPV 钱包节点随机向全节点节点询问 tx 的默克尔树的路径(区块内的交易按照默克尔树算法排序);

SPV 钱包节点使用 tx 和获得的 Mmerkle 树路径计算 merkle_root_hash,并与块头上的 merkle_root_hash 进行比较。如果相等,则确认tx被确认;

根据 tx 所在的区块高度,确定交易收到了多少确认。

需要注意的是,有一类手机钱包是依靠服务器来实现验证的。他们不使用支付验证,他们委托服务器做交易验证。以上是比特币交易验证和支付验证。

如何验证一笔交易是不是双花,钱包如何判断你收的币是不是假的

比特币双花

暂无评论

暂无评论...