我正在编写一个比特币应用程序并希望实现"取消"功能.所有reddit都是参考,如果发生3次确认,技术上可以停止付款.也许只有一分钟或两分钟,但仍然.我在比特币api文档中找不到任何参考来证明如何做到这一点.我知道一个山寨币使用有意的60分钟间隙来证实这个原因.
有谁知道这是怎么做的?
......这是没有时间播出?
是的,显然这是可能的.我建议你在你的比特币应用程序中选择这种方法,向用户显示几秒钟的确认屏幕,其中包含有关交易的信息以及一些按钮说明cancel
和confirm
.@nahtnam建议延迟60分钟,考虑到您可能会松动互联网访问或希望交易尽快出现在区块链中.
......这是已经播出?
也许......要取消这样的交易,您需要自己创建一个块,将原始交易的输入移动到您自己的地址之一.(有效地使原始交易无效.)但是,到目前为止,创建块需要花费数千美元,并且无法保证找到块.
另一种可能性是广播另一个交易,其输入与原始交易相同,并以您自己的地址/钱包之一为目标.为了激励矿工包含此交易而不是原始交易,您需要增加交易费用.然而,一些客户可能不会将这种双重花费的交易转发给矿工,而一些矿工可能会拒绝双重花费的交易并包括原始交易(他们先收到的交易).(参见Bitpay在前10000次交易中遭遇零双重赌注.并取消@theymos(bitcoin.stackexchange)未经证实的tranasaction)
通过创建所谓的"非标准"交易,有一些技巧可以隐藏矿工的初始交易.或者,交易可能包括非常低的费用,以使矿工因经济原因拒绝它.(cf 通过双重支出未经证实的交易(比特币 - 开发邮件列表)和@petertodd(reddit)的双重支出造成的重大损失)然而,如果他们仔细观察并且他们很可能会使您的交易对接收者产生怀疑要求您等到它有一个或多个确认.
最后,如果在原始事务上设置标志以指示可替换性,也可以.然后,您可以通过在替换事务中包含相同(一个或多个)输入来将原始事务替换为另一个事务.此外,您必须支付更高的费用.但是,并非所有矿工都尊重这个标志,有些可能仍然包括您的初始交易.(参考BIP 125:选择完全替换费用信令)
......这是包含在一个或多个块?
不,非常不可能.你需要控制大量的散列能力,通过在原始事务发生之前从块开始重建块链来创建一个fork,并在块中结束height = (current public blockchain height) + 1
.因此,"你拥有的确认越多,这样的攻击就越难,越贵,越不可靠."
来源:@DannyHamilton(Bitcointalk)
Satoshi Nakamoto的比特币论文解释说,当你控制超过50%的散列能力时,这总是可行的,如果控制的可能性小于1,则可能小于1,但大于0 50%的散列能力.见比特币:点对点电子现金系统.但是,如果您控制了大量的散列能力,那么您可能会通过撤消交易并间接损害您的采矿收入流来激励您不要破坏对比特币的信任.