主页 > 老版本imtoken > 双位错误是什么意思?

双位错误是什么意思?

老版本imtoken 2023-03-13 06:33:07

2018201104 刘玉丹

2018201501 邓明学

1.1 什么是“双花”问题?

“双花”,即双重支付,是指在数字货币系统中,由于数据的可再现性,系统可能会因操作不当而导致相同的数字资产被重复使用。

在区块链加密技术出现之前,加密数字货币与其他数字资产一样,具有无限的可复制性。没有中心化的中介机构,人们无法确认一笔数字现金是否早已被花掉。因此,交易中必须有信誉良好的第三方来保存交易账本,从而保证数字现金的单笔交易只会被花费一次。

如果一种数字货币可以重复使用,同样数量的钱花两次或更多,它就没有价值。数字货币背后的数据是一样的,伪造数据的成本远高于伪造现金。因此,在数字货币的交易中,必须解决双花问题。

2.1 常见支付工具如何解决“双花”问题?

我们每天晚上在天猫等各种平台购物,不需要使用现金。支付宝如何解决“双花问题”?

事实上,支付宝里的钱在数字世界是不存在的。相反,它仍然存在于现实世界的 CCB 中。当您在天猫下单并付款给买家时,您实际做的是:

1.你支付宝;

2.支付宝会将您的钱存入他们的建行账户;

3.在您确认收货后,支付宝会从他们的建行账户中提取款项并支付给买家。

更简单的说,支付宝只是第三方中介。如果你想用数字货币支付,你必须把钱交给第三方中介,可以是支付宝或陌陌。此类机构通过实时更改账户余额来集中管理数据并避免“双重支出”。交易只有在第三方确认后才能成功。

但这产生了一个问题,人类需要为交易的第三方验证支付巨额费用。

虽然每笔交易的“中介费”不高,但全球有数十亿人,交易量巨大。而且比特币转错了怎么办,此类第三方机构对数据进行集中管理,我们很难判断他们是否会有意或无意(被黑客)篡改数据(当然,这只是一种可能性,并没有明确的方向) )。

2.2 比特币如何解决“双花”问题?

我们先假设两种情况:

场景一(假设诈骗者是用户):诈骗者使用数字货币订购数字产品,例如购买电子书,价格为 1 EOS。他先把EOS发给商家,假设交易是tx1;然后同时将等量的 EOS 发送到自己的另一个钱包地址,调用交易 tx2。店铺网站程序查看交易tx1后,感觉没有问题,程序手动发送电子书;但由于交易 tx1 和交易 tx2 发生冲突,矿工只会在一个时间点打包一笔交易。其他节点矿工会验证并拒绝区块打包成功,因此如果交易 tx2 打包成功,则交易 tx1 将无效。在这种情况下,骗子成功双花EOS,也就是他买了电子书,自己拿回来了。EOS。

解决方案:这种场景下的双花比较容易解决。在店铺网站程序手动发送电子书之前,先让区块确认交易,至少一个区块交易,只有至少一个区块确认的交易才会被认为是有效的,只有时间戳和以前不存在。目前比特币交易需要6个区块确认才能安全、有效、可靠,防止出现孤块;EOS 的赎回确认至少需要币安 32 次区块确认。

场景二(假设骗子是矿池或矿工):骗子和矿工先构造交易tx1和tx2,tx1手续费太低,将tx1送到商店买电子书,但交易tx2是隐藏的而不是广播的,只存储在它自己的块中。因为tx1的手续费很低,其他节点矿工不想打包;而 tx2 是隐藏的,因此区块链浏览器无法检测到冲突交易,商家也无法检测到。当商店认为是正常交易时,一旦交易发货,骗子矿工也会将其打包在他们挖过的区块中。这时候区块会被广播出去,全网所有节点都会发现tx1是非法的,直接作废。如果掉了,

解决方案:要防御这种双花攻击,必须依靠其他矿池矿工的配合。因为盗窃构建的 tx2 交易不会被广播,直接打包到盗窃矿池的区块会被其他矿池发现。如果其他矿池将这些包含延迟交易(tx2))的区块隔离出来,那么被盗矿池的这个区块就白挖了,区块奖励也会丢失,这是一件很惨的事情。具体设置可以是矿池会超过一定的时间,比如10秒内,如果交易(tx2)比特币转错了怎么办,但是包含在最新的区块中,则交易会直接被孤立. 在该区块的前一个高度开采。

(但如果执行这些孤立的新政策的算力超过51%,那么基本上没有矿池敢发起这种隐藏交易(tx2)攻击零确认交易。)

比特币作为一种去中心化的点对点电子现金系统,主要借助未花费交易输出(UTXO)和时间戳来解决“双花”问题。

2.21 什么是 UTXO?

比特币交易的基本单位是未使用的交易输出,简称 UTXO。UTXO 是一定数量的比特币,不可分割,由所有者锁定并记录在区块链网络中。当用户收到比特币时,该金额将作为 UTXO 记录在区块链中。用户拥有的比特币实际上将作为 UTXO 分散在数百个交易和数百个区块中。

“用户的比特币余额”的概念是通过比特币钱包创建的。比特币钱包通过扫描区块链并聚合属于该用户的所有 UTXO 来估计用户的比特币余额。事实上,比特币现金系统中没有账户,没有钱包,没有余额,只有被记录在区块链中并被所有者锁定的 UTXO。

当比特币交易被创建并广播到区块链网络时,接收到交易信息的节点会验证该交易并检查它是否存在于 UTXO 中。如果交易输出不再存在于 UTXO 中,则验证失败。

说白了,UTXO是一种包含交易数据和执行脚本(Pubkeys)的数据结构。该数据结构包含有关每笔交易和未使用交易输出的信息。

以一个真实的钱包为例。一个钱包里有一个10元,一个5元,一个1元,一共16元。一个比特币账户的余额也是根据这个账户的UTXO来估算的。

当你花12元买东西的时候,可以拿出10元和5元,然后拿3元找零,那么之前的10元和5元就不再是UTXO了,因为它们已经用完了。新改的3元成为新的UTXO,加上之前未动过的1元UTXO,目前余额为4元。这次新的交易记录在新的区块上,但不会改变历史区块的数据。

比特币使用前后链接的区块链来记录所有的交易记录。当前面的 UTXO 出现在后续交易的输入中时,会检测到该交易的来源已经不在 UTXO 列表中,这意味着这笔钱已经花掉了。但是,这个 UTXO 已经用完了,不再是 UTXO。如果你使用相同的 UTXO 构造两个交易分别支付 A 和 B。那么比特币核心客户端(比特币系统节点)的规则就是只转发第一个侦探看到的。但由矿工决定哪些交易将包含在未来的区块中。

矿工的挖矿程序通常是定制开发的,矿工可以随意选择这两种交易中的一种。例如,一些矿工会选择他们最先听到的交易,而一些矿工会选择交易费用较高的交易。

2.22 什么是时间戳?

时间戳,一个完整的、可验证的数据,可以代表在某个时间之前存在的数据。通常是唯一标识某个时刻的字符序列。对于采用数字签名技术形成的数据,签名的对象包括原始文件信息、签名参数、签名时间等信息。广泛应用于知识产权保护、合同签订、财务会计、电子报价投标、股票交易等。

时间戳在生活中也很常见,比如我们每晚阅读的报纸。报纸上的记录是之前现实生活中某个时刻发生的动乱。我们在动乱发生后通过报纸知道了这场动乱。报纸是风暴的时间戳。暴风雨一旦写进报纸,彩印发行,就不能被后来的人篡改。

比特币现金系统还引入了时间戳的概念。事实上,比特币现金系统是一个由众多节点参与的分布式数据库,是一个开放的大账本;它由一系列按照密码学形成的数据块组成,即块。系统会手动为每个区块的数据信息添加时间戳,从而估算出一个数据加密值,即哈希值。每个新块都包含前一个块的哈希,从创世块开始并链接到当前区块链,形成区块链。

比特币现金系统本身被构建为一个永无止境且坚不可摧的时间戳系统。系统使用数字时间戳确保每个区块按时间顺序连接到区块链上,时间戳也标记了区块链链上的每条数据。

假设用户将其 UTXO 中的 1 个 BTC 同时汇入两个不同的账户,则两笔交易中只有一笔会成功完成。为什么?因为系统中的节点会选择性地记录最先收到的交易。当同一节点同时记录两笔交易时,根据时间戳数据,只有最先记录的交易才会被确认为成功。

如果说他两次汇款的时间间隔很不正常,“用户在12:34:56将1比特币转入1号账户”,“用户在12:34:57将1比特币转入2号账户” “比特币”恰好被两个不同的节点记录,会不会出现“双花”?也不会,这两个节点会同时向比特币网络广播各自包含相关交易的区块。此时,区块链会分叉,剩下的节点会选择在他们认为最长的链上建立新的区块,最后最先建立新的区块并成为当前最长链上的交易(通常是6个区块)就可以确认成功。后续节点将在这条最长的链上构建新区块。

4. 总结

比特币作为一种去中心化的点对点电子现金系统,主要利用 UTXO 和时间戳来解决“双花”问题,它教会了世界如何在不信任第三方的情况下转移数字资产。

面对“双花问题”,比特币现金系统是这样解决的:

首先,每笔交易都要先确认对应比特币之前的情况,检测是否存在于用户的UTXO中。否则,交易将被系统拒绝。

如果用户使用相同的 UTXO 支付两个不同的账户,系统中的节点只确认最先收到的一个。

当两个时间太接近的交易被不同的节点确认时,区块链就会分叉。其余节点选择在他们认为最长的链上构建新块。当其中一笔交易被 6 个节点确认后,它将成为系统中最长的链,可以感觉到这笔交易最终被确认了。

有什么例外吗?

有。如果用户能够掌握比特币网络中超过 50% 的节点,即使他落后于最长的区块链(记录“用户在 12:34:56 将 1 个比特币转入第一个账户”)也无所谓,他仍然可以在另一个区块链上构建块(记录“用户在 12:34:57 将 1 个比特币转移到韩的第二个账户”),直到他赶上并成为新的最长链,这就是比特币的“51% 命中”。

“51% 功率攻击”确实是比特币需要提防的问题,而且还没有发生。原因也很简单。一是没有人能轻易掌握51%的节点;其次,如果一个人或机构已经掌握了 51% 的节点,那么他就是比特币现金系统中最大的受益者。如果他发动51%的算力攻击,比特币的价值将立即归零(能“双花”的比特币一文不值),那么他自己将是最大的受害者。

参考: