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

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 条回复
acess
2021-01-05 23:36:01 +08:00
@Andnot
以前的 blockchain . info 钱包我也不太清楚具体情况,看到有开发者提到过,以前遗留下来的“助记词”应该只是把钱包加密密码用一串单词的方式编码了一下,并不是 HD 种子。
你说是 15 个单词,可能并不是 HD 种子,如果不是 HD 种子,也就无法推导出私钥。

不过 blockchain . info 当时应该还有给你发一个加密的 json 文件,这里面应该才是加密过的私钥。他们还有官方的钱包离线恢复工具:
github . com/blockchain/my-wallet-backup-decryption-tool
Andnot
2021-01-06 10:13:29 +08:00
@acess 哦,的确是!我查找了下硬盘,果然有一个“blockchain.wallet.aes.json”文件,看来这个就是私钥的备份文件了。
那么,我如果换用 Electrum 这类本地钱包,只要导入这个 json 文件就可以了吧?
acess
2021-01-06 19:12:35 +08:00
@Andnot 这个 json 应该是加密的,至少也要先解密吧。
换我的话,我会直接在干净的离线机器上用 Electrum 新建一个标准( HD )钱包,抄写好助记词、妥善保存(同时注明钱包创建日期,以及钱包类型是 Electrum ),然后等到链上手续费不高的时候,分几次把币全部转移过去。
acess
2021-01-06 19:16:11 +08:00
@Andnot
Electrum 也支持创建非 HD 钱包,可以导入单个或多个私钥(也可以导入地址,导入地址后就是仅监视钱包)。
但是,私钥是很敏感的私密数据,直接在电脑上复制粘贴我总是有点害怕,毕竟剪贴板一般应用都可以直接监听。
acess
2021-01-06 20:08:20 +08:00
@Andnot Electrum 的助记词有一点不好,就是和 BIP39 用的是同一套英文单词表,所以会产生混淆,所以我才说要记下额外信息,比如,注明这 12 个单词组成的助记词是“由 Electrum 在 2021 年 1 月 6 日生成的”。
助记词标准在币圈里貌似也是个老问题了。BIP39 现在算是“事实上的标准”,很多钱包都支持;但是 Electrum 不同意用 BIP39,然后才搞出自己的助记词格式。然后呢,带来的就是不兼容问题,Electrum 助记词是不能在 BIP39 钱包里导入的。

(偶然可能会出现可以导入的情况,但这其实是个 bug,导入后,BIP39 钱包会推导出与 Electrum 完全不同的另一组地址,相当于是一个新的、独立的“子钱包”,余额很显然也会是零,因为你之前从来就没用过这个“子钱包”——往里面转币是可以的,但是非常不推荐这么做,因为很可能过了一段时间你就忘了,在 Electrum 视角也看不到 BIP39 这边的余额)

反过来,BIP39 助记词可以在 Electrum 里导入,但很显然你也可以看出来开发者对 BIP39 的态度:你需要在输入助记词时点开“选项”,勾选 BIP39 这个复选框,然后下面还会显示一个警告消息,说什么 BIP39 不符合他们的安全标准之类的……


反对 BIP39 的主要理由,就是 HD 钱包从种子生成私钥、地址,中间是经过一条派生路径的,这有点像目录树一样,打开不同的文件夹就看到不同的内容。
如果不知道正确的派生路径,就无法正确地恢复钱包。每一个层次搜索的空间都高达 2^32,稍微多几个层次就不可能穷举穷尽了。

实际上支持 BIP39 的钱包大多都使用 BIP44 、49 、84 规定的标准派生路径(对 BTC 来说,就是分别派生出 1 、3 、bc1 开头的地址,1 开头就是最传统最经典的 P2PKH 地址; 3 开头是 P2SH 封装的隔离见证地址 P2SH-P2WPKH,相比 1 开头的地址,矿工费享受隔离见证共识规则的折扣,会便宜一些; bc1 开头的是 P2WPKH 原生隔离见证地址,矿工费最便宜,但是这种地址是新设计的 Bech32 格式,有些地方还不能识别),但是这几个标准貌似推出都有点迟,在这之前就有钱包在用 BIP39 了,于是派生路径在日后看来就是“不标准”的。
Andnot
2021-01-08 14:57:22 +08:00
@acess 谢谢!你真是这方面的专家呀,相关知识太丰富了!

我这两天也了解了下 HD 钱包,发现它相比单一的比特币地址 /私钥方式,在保护隐私方面很强,但是从安全性上来说,似乎两者不相伯仲,对于单一的地址 /私钥方式,只要私钥丢失了,那比特币也没了;同样对于 HD 钱包来说,如果助记词丢失了,后果是一样的。不知我这么理解对不对?
而且如果不考虑保护隐私这一块,单一的地址似乎还有个「好处」,就是可以把找零都转回同一个地址,便于随时在网上查看自己的交易流程,避免每次都登录钱包查看。

你还提到私钥导入采用复制粘贴有安全隐患,这个风险的确是存在!谢谢提醒!
不过我特意去看了下私钥的文本,数了数一共 51 个字符( WIF 格式),那手动一个个输入应该也不慢,这样就可以大大降低风险了吧(当然还是会存在键盘被木马软件监控的风险)。

话说我现在不太敢随便转币了,还是想一次性把原始地址导入本地钱包,感觉这样更稳妥些。
acess
2021-01-08 19:03:12 +08:00
@Andnot
“对于 HD 钱包来说,如果助记词丢失了,后果是一样的”——是的。

( V 站现在的关键字审查真烦人……又不知道触发了什么,不让发,哎)
acess
2021-01-08 19:03:42 +08:00
“HD 钱包相比单私钥钱包在保护隐私方面很强”——额,怎么说呢,比特币一直都是伪匿名的,太透明了,隐私性比较差,唯一的隐私性只剩[地址]和[真实身份]不直接挂钩。
acess
2021-01-08 19:04:02 +08:00
地址用一次就换,收·款时换新收款地址,付·款时换新找零地址,这个其实是中本聪的想法,不过换地址这种隐私保护措施基本上也只是聊胜于无罢了。就比如……你能想象,支·付·宝给别人付·款后,可以翻看[对方]最近的几笔交易(哪怕只能看到数额)么?比特币不就类似于这样么。
acess
2021-01-08 19:04:20 +08:00
“便于随时在网上查看自己的交易流程,避免每次都登录钱包查看”——你也意识到了,这在隐私上其实是巨大的缺陷。而且即便是用了 HD 钱包,很多时候你懒得自己搞全节点来本地查询,只能依赖别人建好的索引(比如区块浏览器、钱包服务器)来查询,于是你还是把地址(乃至于 xpub 主公钥,用 xpub 可以推导出下级所有子地址)发送过去了,然后服务器就可以记录下来,知道这一组地址实际上都对应同一个身份,甚至还可以进一步关联到 IP 地址,乃至真实身份(有些钱包是可以 KYC 实名验证的)。
acess
2021-01-08 19:04:32 +08:00
如果你用了全节点(最好再结合 Tor,广播交易时也匿名),把整个区·块·链账本都同步回来了,这样查询交易时都在本地进行了,不会透露任何信息给他人,于是匿名性 /隐私性可以上升一个水平,但是全节点毕竟太大太笨重,很多人都不愿意搞。(而且 Bitcoin Core 全节点实际上为了节省磁盘空间开销,很多索引都没有,所以基本上只能用最笨的办法——扫描历史区块,来找出与钱包有关的交易,非常慢。更糟糕的是,如果你开启了修剪功能,实际上就是简单地删掉旧区块文件,那么就直接“无米之炊”了,钱包里没有的交易,想扫描查询,压根不行,除非从头再同步一次。轻钱包服务器,还有区块浏览器,它们都是提前建立好索引的,所以才可以秒速出查询结果)
另外,万一有什么紧要关头全节点暂时同步不上(或者出了什么软硬件故障),也蛋疼。
acess
2021-01-08 19:06:25 +08:00
“那手动一个个输入应该也不慢,这样就可以大大降低风险了吧”——这个我感觉意义不大,纯粹是更麻烦了。

“话说我现在不太敢随便转币了,还是想一次性把原始地址导入本地钱包”——你可以在离线环境里,用 blockchain . info 官方提供的工具把私钥解密出来,然后导入 Electrum ;再用联网的设备运行另一个 Electrum,新建钱包,选择导入比特币地址。

还有,blockchain . info 这种自己掌控私钥的钱包,其实本质上和你说的“本地钱包”区别并不太大,实际上就是把“本地钱包”的软件代码跑在了浏览器里面。
acess
2021-01-08 19:09:27 +08:00
@Andnot 我也不算专家,我只是尽量说说我知道的,不保证一定准确。
Andnot
2021-01-09 17:19:34 +08:00
@acess 你这个类比好形象呀,的确,比特币的匿名性是有一定问题的,不过好在不会太影响资金的安全性。
Andnot
2021-01-09 17:52:48 +08:00
@acess 呃,为何手动输入密钥的安全性也没有提高呢,是因为可能存在的键盘监控软件吗?

「你可以在离线环境里,用 blockchain.info 官方提供的工具把私钥解密出来,然后导入 Electrum ;再用联网的设备运行另一个 Electrum,新建钱包,选择导入比特币地址。」——这个应该就是冷钱包方案吧?(联网的 Electrum 导入地址,仅仅具备查询功能,从而提高安全性。)

关于在线钱包,我现在用的 Blockchain 服务应该就是你说的这种,网站上叫做「 Imported Bitcoin Addresses 」,它还提示我让我将这些「 Imported funds 」转入 wallet 。我觉得网站应该是有我的私钥的,因为每次交易都是自动完成,也没让我自己再输入私钥签名。

我比较关心的是安全性,这种钱包虽然与本地钱包区别不大,但应该还是有安全隐患的吧,比如网站数据库被黑了导致私钥泄漏之类。

但使用本地钱包我也有担心,一个是 Electrum 这类钱包软件曾爆出过漏洞,一个是我个人电脑的安防强度肯定比不上 Blockchain 这类专门做加密币的,从保存数据方面风险可能会更大。

我能想到的最安全的方案,是在一台离线电脑上用 Electrum 新建两个冷钱包,第一个钱包导入私钥,然后全部转给第二个钱包,交易签名什么的全程断网操作,然后用另一台联网电脑,将签名后的交易广播出去,静等完成转账。

不知你有没有更好的建议?
Andnot
2021-01-09 17:56:24 +08:00
@acess 你太谦虚啦,这几天与你交流真是学到了不少这方面的知识,非常感谢!
acess
2021-01-09 19:51:02 +08:00
@Andnot
我前面说过了,blockchain 钱包虽然跑在浏览器里,但它本质上和 Electrum 这种“本地钱包”区别不大,主要区别就是它跑在浏览器里。
blockchain 服务器确实保存了私钥,但是是加密保存的。这和[离链钱包](这个术语现在也有点过时了,因为闪电网络也是离链,但通道仍然是用户自己掌控的,和掌控私钥性质一样)或者叫[托管钱包]( custodial wallet,用户不掌控私钥,只有一个账户,资金控制权完全在钱包服务商手里)性质还是不一样的。不过我前面也说了,像 blockchain 这种网页钱包,相当于钱包代码每一次都从网上远程加载,万一网站被黑了,黑客即便不能直接偷到明文私钥,也仍然有可能用恶意代码替换掉正常的钱包代码,所以我才说这种钱包安全性较差。

就算是 blockchain 网站的安全性做得好,归根到底私钥还是会在你的浏览器里解密成明文。
所以说,如果你的电脑环境不安全,比如浏览器有恶意插件,那还是完蛋。
(当然,如果说到浏览器恶意插件,其实想象空间还可以很大——即便是冷钱包,不能直接偷币,恶意浏览器插件也仍然可以尝试偷换交易对象的收款地址,比如交易所的充币地址)


Electrum 确实爆过几个大漏洞,不过后来都修补了。而且冷钱包即便爆了漏洞也无法直接偷币。还有,当时爆那个钓鱼漏洞时,因为我用的是 Electrum Personal Server 对接了自己的 Bitcoin Core 全节点,所以压根就没受到这个漏洞的影响,是事后才看到这个消息。


还有,冷钱包实际上是两台设备分工的。
断网设备保存私钥,从来不联网,但是仍然需要通过二维码等手段来和外界交互数据,它负责检查交易内容、对交易内容签名;
联网设备不保存私钥,只保存地址或 xpub 主公钥,可以联网同步账本内容(交易记录、余额),可以展示收款地址,可以制作未签名交易,交给冷端检查、签名后,再广播出去。
Andnot
2021-01-11 14:38:57 +08:00
@acess 谢谢你的回复!
Blockchain 加密保存用户的私钥,这个加密过程就是用网站的登录密码加密的吧,今天看了一篇文章,就讲到 Blockchain 是如何不保存用户的明文密码的: https://www.8btc.com/article/25680
如果真是这样的话,只要不发起交易,私钥以加密方式保存在 Blockchain 网站上应该也是足够安全的吧?

你提到浏览器的安全问题,这倒是个无法忽视的安全风险,虽然我从来只用 Chrome 的官方版本,但时不时也都会爆出一些大大小小的安全漏洞,这点确实不如专门的软件来的安全,可能那种区块链专用浏览器能够好些?

冷 /热钱包的解释简洁易懂,再次感谢!

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

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

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

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

© 2021 V2EX