双花(double pay)是比特币以前的一种攻击手段,可以用来攻击未确认就入账的交易所(目前也不会有交易所这样处理)。所以正常来说目前交易所要2个或者6确认才入账。
双花意思是,一笔transaction交易同时发起两笔交易。正常用户操作是不会操作出来的。在发起一笔交易的时候,本地就缓存了一份数据,再次发起便会失败。
有时候,我们发起一笔交易,手续费给得太低,即便区块是空的,交易也没有被打包进去(这点很奇怪,理论上会打包,实际并没有,我猜可能大部分矿池都有最低手续费限制。不接受这种太低的交易,任性。)
如果去“加速”这种交易,那可能需要几千甚至上万块。
据我了解,有三个方法可以发起双花交易:
1.两个btc core同时发起两笔同源(transaciton)的交易。
2.一个btc core 发起一笔交易后,广播出去,再取消本地交易。
3.本地脚本代码,直接构建交易信息,多次广播不一样的交易到其他核心。
这里我们只详细用第二种方式来做阐述:
a.当用户发起了一笔交易,获得了一个transaction,这个交易手续费太低,没有区块打包。
b.这个时候,我们在外网能看到,在本地也能看到。通过
bitcoin-cli gettransaction xxxxb40f824a4b5db6df047e43d64ce876b2b96d012db2ab5e87d078495ed9d12de0
c.再次发起同样交易在本地核心是不可能的,要先本地强制移除这笔交易。
bitcoin-cli removeprunedfunds xxxxb40f824a4b5db6df047e43d64ce876b2b96d012db2ab5e87d078495ed9d12de0
d.移除后,修改手续费发送新交易,报错:交易已经在缓存里
e.重启核心,修改手续费发送新交易,成功发出双花交易。
f.等待矿池接受新交易,新交易的手续费高于原本的,被打包覆盖,原本的时效。