我正在编写一个比特币应用程序并希望实现“取消”功能。所有reddit都是参考,如果发生3次确认,技术上可以停止付款。也许只有一分钟或两分钟,但仍然。 我在比特币api文档中找不到任何参考来证明如何做到这一点。 我知道一个山寨币使用有意的60分钟间隙来证实这个原因。
任何人都知道如何做到这一点?
答案 0 :(得分:14)
是的,显然有可能。我建议您在比特币应用中选择此方法,向用户显示几秒钟的确认屏幕,其中包含有关交易的信息以及一些显示cancel
和confirm
的按钮。 @nahtnam建议延迟60分钟,考虑到您可能会失去互联网访问权或希望交易尽快出现在区块链中。
可能...... 要取消此类交易,您需要自行创建一个块,将原始交易的输入移动到您自己的地址之一。 (有效地使原始交易无效。)但是,截至目前创建块数千美元并且找不到块无法保证。
另一种可能性是广播另一个交易,使用与原始交易相同的输入,并将输出定位在您自己的地址/钱包之一。为了激励矿工包含此交易而不是原始交易,您需要增加交易费用。然而,一些客户可能不会将这种双重花费的交易转发给矿工,而一些矿工可能会拒绝双重花费的交易并包括原始交易(他们先收到的那个)。 (c.f。Bitpay encountered zero double spent in the first 10000 transactions.和Cancelling an unconfirmed transaction by @theymos (bitcoin.stackexchange))
通过创建一个所谓的非标准"有一些技巧来隐藏矿工的初始交易。交易。或者,交易可能包括非常低的费用,以使矿工因经济原因拒绝它。 (参见Significant losses by double-spending unconfirmed transactions (bitcoin-dev mailing list)和Double-spending by @petertodd (Reddit))但是,这会使您的交易看起来对接收方看起来很可疑,如果他们仔细观察它们,他们很可能会要求您等到它有一个或多个确认。
最后,如果您在原始事务上设置一个标志以指示可替换性,也可以。然后,您可以通过在替换事务中包含相同(一个或多个)输入来将原始事务替换为另一个事务。此外,您必须支付更高的费用。但是,并非所有矿工都尊重这个标志,有些可能仍然包括您的初始交易。 (参见BIP 125: Opt-in Full Replace-by-Fee Signaling)
包含在一个或多个块中? 不,非常不可能。您需要通过在原始交易发生和结束之前重新开始在区块中重建区块链来控制大量的哈希能力来创建分叉在height = (current public blockchain height) + 1
的区块。因此,"您拥有的确认越多,这样的攻击就越难,昂贵且不可靠。"
Source: @DannyHamilton (Bitcointalk)
Satoshi Nakamoto的比特币纸解释说,当你控制超过50%的散列能力时,这总是可行的,如果控制的散列能力小于50%,则可能的概率小于1但大于0。见Bitcoin: A Peer-to-Peer Electronic Cash System。
但是,如果您控制了大量的哈希权,那么您可能会通过撤消交易并间接损害您的采矿收入流来激励您不要破坏对比特币的信任。
答案 1 :(得分:3)
没有。不可能停止比特币交易。这就是比特币如此不同的原因。除了让接收者将其发回给你之外,没有办法扭转交易。
另一方面,您仍然可以使用取消功能。您可以在发送交易之前设置60分钟的延迟,在此差距中,有人可以取消,但正如我之前提到的那样,无法阻止已经到达区块链的交易。
答案 2 :(得分:0)
在进行比特币支付之前制定策略。检查付款人和收件人的比特币地址是否正确(使用复制和粘贴工具)。检查产品/服务和$金额的详细信息是否正确。检查您是否拥有正确的私钥详细信息。期待至少等待24小时确认。这允许矿工有时间验证交易。然后检查您的比特币帐户,确保通过将您的私钥详细信息插入Google搜索来正确完成交易,或检查您的比特币软件以获取交易详情。 取消交易既复杂又昂贵。因此,在您付款之前,请先检查,检查并再次检查,然后再发送。