手续费太低导致交易卡在未确认状态,可以采取什么办法?

2017-06-02 15:29:34 +08:00
 acess
LZ 还不是很熟悉比特币……
有一笔交易已经卡了好几天了,至今仍然是未确认状态。
看到网上的资料,尝试构造了一次 double spent 来实现“ Replace By Fee ”( RBF ):
1.在控制台使用 getrawtransaction 命令查到被卡交易的 raw transaction,然后使用 decoderawtransaction 解码交易详细信息,记下;
2.断网,使用 zapwallettxes 参数重启 Bitcoin Core 钱包,这样钱包里已经没有被卡的那笔交易了;
3.在控制台使用 createrawtransaction 命令构造一个“双花”的交易:输入信息和被卡的那笔交易一样,输出改成自己的另一个钱包地址,提高交易费到约 0.00125BTC。然后使用 signrawtransaction 命令签名交易;
4.重新联网,再使用 sendrawtransaction 命令广播刚刚签名过的交易;

现在我的本地钱包里有显示这笔 double spent 交易,被卡交易已经消失,但好像新构造的交易还不被网络接受。去 https://blockchain.info/pushtx 提交也提示失败,而且在 BlockChain 上搜索 TXID 也搜不到新构造的交易。似乎是因为原先被卡的交易仍然被节点记住。
去别的网站尝试广播交易,仍然提示失败,有的提示 258: txn-mempool-conflict。

不知道现在还能采取什么手段?
4001 次点击
所在节点    Bitcoin
38 条回复
boter
2017-06-02 16:41:52 +08:00
不着急的话 先等几天再说吧
acess
2017-06-02 17:58:06 +08:00
@boter 好像 RBF 也是要之前的交易标记允许才行的?
现在 BlockChain 上一直都有拿笔卡住的交易,新构造的交易则拒绝接受。
boter
2017-06-02 18:32:24 +08:00
@acess 如果内存池里没有新构造的交易
可以用加速服务加速之前卡住的交易

当然,什么都不做,等待是最安全的
acess
2017-06-02 19:07:16 +08:00
@boter 我去,“双花”好像成功了😂我试了好几个途径去广播,不知道是哪个节点帮我广播出去的。
zaishanfeng
2017-06-03 11:17:31 +08:00
比特币已经被玩坏了,现在一笔转账得好几天,手续费贼贵, 大玩家已经开始找接盘侠了
acess
2017-06-03 12:29:28 +08:00
@zaishanfeng 好像早就有扩容方案了,为啥一直没实行?
wuqing78
2017-06-03 22:43:32 +08:00
有收费加速服务的
ryd994
2017-06-05 13:24:10 +08:00
不可能拿来干坏事的,如果前一笔被确认的的话,后一笔几乎不可能被确认
“几乎”的意思是,如果有严重的网络分区,则整个比特币网络可能分裂。btc 上好像还没有过,其他币有过。
Andnot
2020-12-30 17:25:02 +08:00
我有个疑问,假设 A 地址有 3btc,向 B 地址转账 1btc,找零地址 C 得到 2btc,由于手续费低(此处假设为 0,实际可能是个很低的费率),交易一直未确认。那么,此时可以用找零地址 C 向另一个地址 D 进行转账吗,如果提高手续费,能否将之前 A 向 B 进行的零手续费交易确认呢?
acess
2020-12-30 20:44:14 +08:00
@Andnot
零确认的币是可以花掉的。没记错的话,Bitcoin Core 钱包默认不允许用户花掉任何零确认,在设置里可以放宽限制,然后自己的零确认找零可以花掉。这个应该是有渊源的,bitcointalk 有个帖子 I broke my wallet, sends never confirm now 里面说的就是类似你这种情况。Bitcoin Core 钱包应该就是为了避免出现这种第一笔零确认被卡 /被双花撤销,导致后续一连串交易跟着被卡 /被双花撤销的情况,才不让用户花掉零确认。
别的钱包就未必有这个限制,Electrum 我记得就可以直接花掉零确认收款,零确认找零当然也可以。

要说零手续费交易,这又是另一个话题了。每个节点默认情况下都是不转发、不打包手续费过低的交易的,我记得最低 1sat/vbyte 。所以零手续费交易正常情况下是很难打包进链的,可能广播都很难广播出去。但是如果有矿工愿意打包,这种行为也是被允许的。
acess
2020-12-30 21:08:38 +08:00
@Andnot
现在 Electrum 钱包甚至都直接把利用 RBF (单指 BIP125,而不是我这个老帖子里这种,没有启用 RBF,却仍然要双花替换的行为)双花撤回交易做成一键完成的了。
即便 Electrum 不这么做,RBF 也一直可以达到这个目的,所以争议才大……RBF 支持者认为零确认本来就不安全,RBF 可以让追加手续费变得方便,形成一个用户挂单、矿工吃单的“手续费市场”; RBF 反对者认为 BIP125 给坏人提供了方便,“手续费市场”就是拥堵、很荒唐……
acess
2020-12-30 21:12:15 +08:00
@Andnot 之前 RBF 只是被用来追加手续费的,该付给谁多少钱还是多少钱,只是回到自己钱包的找零会少一些(对应矿工费被追加了)。一直都有人说,RBF 可以追加手续费,当然也可以恶意利用来进行双花欺诈(如果收款方看到零确认就认为已经到账的话)。Electrum 就是把这个双花功能直接做出来了,我猜,大概是考虑到用户的交易被卡住太久后,可能压根就不想付款了(毕竟比特币价格波动大),对方从一开始也不会认为这笔交易到账过,所以撤了就撤了。
acess
2020-12-30 21:18:34 +08:00
就拿 Electrum 来说,其实手动完成这个双花也不至于难过登天:
1.观察被卡住的零确认交易,看看花掉的是具体哪一个 UTXO ( TXID:输出序号),把对应的交易导出。
2.断网(可以设置 Electrum 的代理服务器到 127.0.0.1 上没有程序监听的端口),重新创建一个钱包,把私钥或 HD 种子导入。
3.断网创建的钱包里很显然是没有交易的。这个时候,把被花掉的 UTXO 所在的交易导入,这样钱包里就显示出余额了。
4.开启“选币( Coins )”标签页,手动选择之前被花掉的 UTXO,进行双花。可以转给当初要付款的地址,也可以干脆转回自己的地址。当然,这次矿工费要多给点。
5.交易签名后,把它保存好。含有之前那笔被卡住零确认交易的钱包,要关掉。然后,多方尝试广播双花交易。
Andnot
2020-12-31 11:22:20 +08:00
@acess 谢谢你的解释!
我恰好遇到了这个问题,只不过是在 Blockchain.com 的在线钱包,它的找零地址都是即时生成的,无法人为指定。好在我的在线钱包中目前只有这一笔 0 确认交易,就把这笔交易对应的找零地址中的余额又转了一部分给我的另一个钱包地址,手续费也提高到了网站自动建议的费率( 59 sat/B ),只不过目前这笔交易也是未确认状态……如果这第二笔交易得到确认,是否第一笔 0 确认交易也可以同时得到确认呢?

Electrum 本地钱包我还真没用过,今天研究研究,之前一直用的都是在线钱包,没想到过会遇到这种问题。
acess
2021-01-01 03:22:01 +08:00
@Andnot 除了 RBF,另一种追加手续费的方法 CPFP 就是像你说的一样,把之前被卡住的币用更高手续费花出去,这样两笔交易的平均手续费就被拉高了。Electrum 里也直接实现了这个功能,右键菜单里就有。
其实现在不太推荐用 blockchain . com 这种网页钱包,毕竟这种钱包的代码是远程加载的。软件钱包虽然归根到底也是从网上下载的,但是一次下载完成后就不会改动,还方便验证数字签名。
(不过,有一说一,Electrum 也爆过几次重大漏洞,影响最大的就是钓鱼漏洞了,虽然钓鱼信息不能直接偷走币,但是从钱包界面里直接弹出钓鱼信息,这个欺骗性确实太强,一不小心就被带进去了;除此之外,能直接偷币的 RPC 漏洞也出过,但是貌似没多少后续影响。以前爆过的漏洞后来当然都很快修复了,不过很显然总是有不少钱包没升级,尤其是钓鱼漏洞,影响一直都有,时不时就有人去哭诉说自己中招了)
acess
2021-01-01 03:26:10 +08:00
@Andnot 一般是 RBF 用不了的情况下才用 CPFP……有时候连 CPFP 都用不了(比如,所有币都转出去了,没留找零),这个时候要么自己手动双花,要么就得找矿池买加速器了。加速器本质上和 RBF 、CPFP 都一样,都是交钱插队,但是加速器一般比较贵,也不像 RBF 、CPFP 那样是全网公开竞价,而且还不能逐次逐渐加价。(要说退款,那当然都不能退……RBF 也不能退,即便是通过双花撤销了付款、把币转账回自己的钱包,矿工费追加了还是追加了)
acess
2021-01-01 03:28:48 +08:00
@Andnot Electrum 是支持冷热分离的(这样即便是有漏洞,热端没有私钥,也不能直接盗走币)。而且它还可以通过 Electrum Personal Server 对接 Bitcoin Core 全节点,这样一般都说隐私性会略强一些(虽然比特币的隐私本来就很蛋疼,但是用了自己的全节点,就不会把自己的地址信息上传给钱包服务器,钱包服务器就不会把这一堆地址联系到一起、知道它们其实属于同一个主人,从这个意义上说隐私性改善了)。
Andnot
2021-01-04 15:43:35 +08:00
@acess 非常感谢!你把相关概念解释得真清晰,佩服!
我也来汇报一下后续情况,后来通过第二笔高手续费的找零余额交易(即 CPFP 方式),我的两笔交易都得到确认了,看来只要手续费提上去了,矿工还是很乐意把遗留的零确认交易一并打包的。
元旦期间有事耽搁,一直也没好好使用下 Electrum,等我回头把 Blockchain.com 上的地址私钥导入后,再发起一笔 RBF 交易试试看:)
acess
2021-01-04 20:52:22 +08:00
@Andnot 只要有交易费可以赚,矿工都是愿意打包的,只不过区块大小限制是共识规则,矿工也不能随便打破规则,否则挖出来的区块不会被其他人接受,就白挖了。

其实私钥不推荐随便倒来倒去(而且现在都是 HD 钱包了,导入也是导入 HD 种子,或者说是助记词,而不是单个地址私钥),万一操作中途泄露了,或者出什么别的岔子导致丢币(比如 Bitcoin Core 的经典找零丢币陷阱,这个找零丢币不是一般说的“100 个地址用完后丢币”,其实好多年前 Bitcoin Core 就实现了 HD 钱包,虽然有点别扭、甚至简陋。我说的是:把私钥导入到新的、没备份过的 wallet.dat 里面,然后转出,找零就自动跑到了没备份过私钥 /HD 种子的地址上)就不好了。
Andnot
2021-01-05 17:33:05 +08:00
@acess 原来如此!
我的在线钱包是好多年前注册的了,不知道支不支持 HD 钱包这种方式,我记得当时网站让我记下了 15 个单词,可能就是助记词吧。
关于 BTC,这是最不让我放心的一点,总觉得 BTC 里有太多不确定的东西,一不留神就踩了什么陷阱,而且这种去中心化的系统,出了问题也没地方申诉……哈哈,当然技术本身就具有两面性,去中心化也恰恰是 BTC 的优点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/365473

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX