我正在编写一个比特币应用程序并希望实现一个“取消”功能。reddit 上到处都是参考,如果发生了 3 次以下的确认,从技术上讲,可以停止付款。也许只有一两分钟可用,但仍然如此。我在比特币 api 文档中找不到任何参考来演示如何做到这一点。我知道一个山寨币出于这个原因故意使用 60 分钟的间隔来确认。
有谁知道这是怎么做到的?
……还没有播出?
是的,显然这是可能的。我建议您在您的比特币应用程序中选择此方法,向用户显示几秒钟的确认屏幕,其中包含有关交易的信息和一些按钮说cancel
和confirm
。@nahtnam 建议延迟 60 分钟,这太过分了,因为您可能会失去互联网访问权限或希望交易尽快出现在区块链中。
……已经播出了?
也许......要取消这样的交易,您需要自己创建一个块,将原始交易的输入移动到您自己的地址之一。(实际上使原始交易无效。)但是,到目前为止,创建一个块需要花费数千美元,并且不能保证找到一个块。
另一种可能性是广播另一笔交易,其输入与原始交易相同,并将输出定位在您自己的地址/钱包之一。为了激励矿工包含此交易而不是原始交易,您增加了交易费用。但是,一些客户端可能不会将这种双花交易转发给矿工,而一些矿工可能会拒绝双花交易并包含原始交易(他们首先收到的交易)。(cf Bitpay 在前 10000 笔交易中遇到零双花。并通过@theymos (bitcoin.stackexchange) 取消未确认的交易)
通过创建所谓的“非标准”交易,有一些技巧可以向矿工隐藏您的初始交易。或者,交易可能包括非常低的费用,以使矿工出于经济原因拒绝它。(cf双重支出未确认交易(比特币开发邮件列表)和@petertodd(Reddit)双重支出造成的重大损失)但是,如果接收者仔细观察,这会使您的交易看起来很可疑,而且他们很可能要求您等到它得到一个或多个确认。
最后,如果您在原始事务上设置一个标志以指示可替换性,也是可能的。然后,您可以通过在替换交易中包含相同(一个或多个)输入来用另一笔交易替换原始交易。此外,您必须支付更高的费用。然而,并不是所有的矿工都尊重这个标志,有些可能仍然包括你的初始交易。(参见BIP 125:选择加入完全按费用替换信号)
...包含在一个或多个块中?
不,几乎不可能。你需要控制大量的散列能力来创建一个分叉,方法是从原始交易发生之前的块开始重建区块链,并以height = (current public blockchain height) + 1
. 因此,“您拥有的确认越多,这样的攻击就越困难、昂贵和不可靠。”
资料来源:@DannyHamilton (Bitcointalk)
Satoshi Nakamoto 的比特币论文解释说,当你控制超过 50% 的散列能力时,这总是可能的,并且如果你控制的概率小于 1,但大于 0 50% 的算力。参见比特币:点对点电子现金系统. 但是,如果您控制了大量的哈希算力,您可能会受到激励,不会通过撤销交易和间接损害您的挖矿收入流来破坏对比特币的信任。
不,不可能停止比特币交易。这就是让比特币如此不同的原因。除了让接收方将其发回给您之外,没有其他方法可以撤销交易。
另一方面,您仍然可以拥有取消功能。您可以在发送交易之前设置 60 分钟的延迟,在此期间,有人可以取消,但正如我之前提到的,没有办法停止已经到达区块链的交易。
在进行比特币支付之前制定策略。检查付款人和收件人的比特币地址是否正确(使用复制和粘贴工具)。检查产品/服务的详细信息和金额是否正确。检查您是否拥有正确的私钥详细信息。预计至少要等待 24 小时才能确认。这让矿工有时间验证交易。然后检查您的比特币帐户,通过将您的私钥详细信息插入 Google 搜索来确保交易正确完成,或者检查您的比特币软件以获取交易详细信息。取消交易既复杂又昂贵。因此,在您付款之前,请在发送前检查、检查并再次检查。