第
0
章
引言
你有想过可以通过垃圾交易攻击作废掉一个地址吗?
这是我碰到的一个真实案例。
第
1
章
一个理财项目引发的尴尬
一个朋友参与了李笑来的比特沙银行理财,存了一个币,每天能收到
0.000
1BTC
的利息。存了好几年了。
比特沙这个项目很有意思,是以比特币地址作为账户的。你用自己掌握私钥的地址往比特沙的存钱地址转入存款,然后利息每天都会自动发到你这个地址上来。而且你取款也只需要向存款地址发一笔特定金额的比特币,然后银行就会按该交易金额的
1000
倍返回到你的地址。当然你的取款金额不可能超过存款金额的。
这位朋友在几年的时间里,每天都收到
0.0001
BTC
的比特币,到昨天为止,他的地址上一共有
1830
个
0.0001
的
UTXO
。
(为了描述方便,中间忽略掉这个地址的一些不是
0.0001
BTC
的收款,所以具体数据不是1830个UTXO,但不会影响整个文章的逻辑)
然后在前天他决定将这笔存款提出来,他往存款地址转入了
0.001
BTC
,然后银行给他返回了
1BTC
。
结局是,他的这个地址里有
183
3
次历史交易,一共有
1
.183
BTC
余额,却有多达1831个UTXO。
现在他想把这笔钱转入交易所卖掉。结果发现,他转不出来。
他用的钱包是
blockchain.info
。用这个钱包发送比特币时,只能按照地址的
UTXO
的时间顺序来花,先到的
UTXO
先花。
也就是说,如果他要发送
0.0001
BTC
的话,
blockchain.info
钱包就会构造一笔交易,交易的
input
是最早的那笔利息。如果他要发送
1BTC
的话,
blockchain.info
钱包会构造出
1831
个
input
和两个
output
,即钱包不会直接将他收到的那个
1BTC
的余额作为
input
,而是会从最早收到的
0.0001
BTC
的利息开始凑余额,一直凑到
1
831
个
Input
才能凑够
1.183
BTC
,然后发送出去,再找零找回
0.183
BTC
,这里没有扣除矿工费。
1832
个
input
构造出来的交易体积会大于
1M
,超过了区块上限,所以这个根本不可能构造出来。
而且你知道的,现在比特币区块太堵了。
如果你要构造一笔
0.0001BTC
的
UTXO
作为
in
put
的交易,结果是手续费都不够,根本发不出去,如果你以更低的矿工费发构造交易,则永远不可能被确认。
所以我这位朋友这
1.183
BTC
的余额在
blockchain.info
的判断下,是根本不能花的币。如果选择正常的矿工费的话,钱包不让发送,因为根本花不出去。只有使用户自定义手续费时,将手续费设到10sat/byte以下才能被发送。
第
2
章
通过构建垃圾交易来清除
1830
个
0.0001
BTC
的
UTXO
这位朋友请我帮忙。他把钱包账户和密码都告诉了我。
我查了半天,发现了上面描述的逻辑。
我第一个想到的办法是将私钥导出来,再导入到
bitcoin
完整节点钱包,通过
c
reaterawtransaction
命令来专门构造选定的
UTXO
来把这
1BTC
的币发送出来,其他的
0.0001
BTC
就不要了,等扩容之后再搞吧。
但发现
blockchain.info
是
HD
钱包,导出的是十二个单词的密语,我的完整节点钱包不支持
HD
钱包。
然后我只好用第二个办法——使用零手续费发送垃圾交易将
1830
笔
0.0001
BTC
的
UTXO
清除掉地址的UTXO列表,只留下最后那
1
BTC
的
UTXO
,然后就可以正常发送
1BTC
的交易了。
我使用零手续费,每一次构造出
250
个
in
put
,一个
output
,交易金额是
0.025
BTC
,
的交易。每一笔交易体积都高达
44.914
K
b
。(对不起了,比特币网络,我发了五笔垃圾交易)
最后这个地址剩下
1.018
BTC
时,我构造出一笔手续费为
0.0013
BTC
,两个
Input
一个
Out
put
的交易。并且请矿池加速。最后成功拿回
1.018
BTC
的币。又花了点矿工费,发到交易所,最后卖到
19600
多块钱。
第
3
章
原来李老师的自动化理财银行会制造那么多垃圾交易
我们经常可以在网上看到大量的
0.0001
BTC
的交易,一开始我还纳闷,这些交易有什么意义啊,是故意发起的垃圾交易攻击比特币网络吧。
现在我知道了,原来这些“垃圾交易”有可能是自动化理财项目发送的利息。
而且这些利息金额太小,现在区块堵成这个样子,根本不能用这种小额的币。而钱包又默认按
UTXO
的时间顺序来构造交易,结局就是这些利息全是死币了,除非扩容成功。
我上面构造的几笔
250
个输入的交易,
0
手续费,注定是不会被确认了,现在去
btc.com
查,已经查不到这些交易了,因为
btc.com
已经将它们踢出内存池了。但
blockchain.info
还是可以查到。
这些垃圾币最后肯定会回到我朋友的地址上,但除非扩容成功,否则就是没法用了。
第
4
章
结束语
不知道现在比特沙存币多不多,如果多的话,那李老师这个银行每天得制造多少垃圾交易啊!
(为了不暴露隐私,我就不提供这们朋友的地址了)
(如果您觉得好,欢迎关注我的公众号:
闪电HSL,也欢迎加我微信号:13116885)
(如果你想学习比特币和区块链知识,欢迎加入我的小密圈)