Photo by Artūras Kokorevas
Sparrow Wallet (Bitcoin)#
理论#
-
UTXO 是什么
-
UTXO, 全称为Unspent Transaction Outputs, 即未花费的交易支出.
-
比特币中,任何一笔 transaction, 都有一个 input, 以及相应的 output
-
相较于 EVM 生态,BTC 更像是纸币,而 EVM 更像是银行 [👉 以下例子均不考虑实际 RMB 面额限制 👈]
- 举个例子,你有 100 元现金 RMB, 一张纸币,10 快钱转账给老王,gas 设置为 5, 那么最后你会剩下一张面额为 85 的 UTXO, 你的一张 100 元纸币,变成了一张面额为 85 的纸币
- 上面的花销中,100 元纸币就作为 tx 的 input, 而 output 分别是
- 85 (返回给自己的 UTXO), 会返回给你自己的钱包,
- 10 (这个 UTXO, 即面额为 10 的纸币) 是给到了对方的钱包
- 5 (面额为 5 的纸币) 是给到了矿工的钱包
- 后面你再花钱,只能花这 1 张纸币 (面额为 85). 作为交易的输入,去发起新的 transaction.
- 最后 你想给把自己面额 85 的 UTXO 拆掉,拆成 30+50, 那么你发起第二笔 tx, 接收方是自己,面额为 50. 那么,input 是 85 的 UTXO, output 有三个
- 自己发给自己,面额为的 50 的 UTXO
- 剩下的面额为 30 的 UTXO
- 还有面额为 5 的 UTXO 进了矿工的钱包
-
-
加速交易的两种方法
❤️ ❤️ ❤️ 不管你用 RBF 还是用 CPFP, 都需要确保自己 UTXO 的 Balance 是足够的,不然是无法加速的 ❤️ ❤️ ❤️
-
RBF, 全称为Replace-by-fee, 即未确认的 transaction, 可以用新的 transaction (并给予新 tx 更高的 gas) 来替代掉,
-
首先明确 只有是你自己的 UTXO 作为 input, 才能去发起 RBF 🍎
-
其次,来Here查看你的 tx 是否可以 RBF, 比如下面这一笔就可以进行 RBF
- 最后 举个例子来说明,RBF 是什么
- 同样以上面钱包里只有 30+50 这两笔 UTXO 来说,我新发起一笔 tx, 利用 50 的 UTXO 再次向老王转账 10, gas 设置为 5, 这笔 tx 记为 tx1
- 那么如果 tx1 成交,
- 那么我的钱包里应该会有两个 UTXO, 分别是 30, 35 这两张,前者是没动的 UTXO, 后者是 tx1 完成后返回来的 UTXO
- 老王钱包里则是 10+10, 两张 UTXO
- 矿工钱包是 5+5+5 三张 UTXO
- 但是我发起 tx1 之后,我想加速一下 (这里有两个方面)
- 我不想给老王钱了,想赖掉
- 那么这时候就可以用 RBF 来加速,发起一笔新的 tx, 称之为 tx2, tx2 是利用面额为 50 的这笔 UTXO, 给自己转 20, gas 设置为 10.
- 这笔 tx2 完成之后
- 我的钱包里会有 20 + 20 + 30, 这三张 UTXO
- 老王的钱包只有 10, 一张 UTXO
- 矿工的钱包里有 5+5+10, 三张 UTXO
- tx2 会成交,因此可以赖掉给老王的转账 🍓
- 我嫌弃 gas 太低,想快点成交
- 同样可以用 RBF 进行交易,发起一笔新的 tx2, 利用面额为 50 的这笔 UTXO, 给老王转账 10, gas 设置为 10
- 那么 tx2 完成之后
- 我的钱包里会有 30+30 这两张
- 老王钱包里会有 10+10 这两张
- 矿工钱包里 则是 5+5+10, 这三张
- 我不想给老王钱了,想赖掉
-
-
CPFP, 全称为 Child Pays For Parent, 即利用发起一笔 gas 高的子交易,来加速父交易,
因为想要确认高 gas 的子交易,就一定要确认父交易
- 首先明白,所谓子交易指的是,子交易的 input, 用的是未能确认的父交易的 output.
- 即我发起 tx1, 给老王转账 100 gas 设置为 10. 100 作为 tx1 的 output.
- 老王想用我给他这 100 作为 input, 给老李转 50, 但是由于我的这笔 tx1 还没确认,因此他只能发起一笔子交易 tx2, gas 设置为 20, 来加速父交易.
- 这里的父交易即 tx1, 子交易即为 tx2.
- 首先明白,所谓子交易指的是,子交易的 input, 用的是未能确认的父交易的 output.
-
实践#
-
以Sparrow Wallet来说,启动 testnet >>>> Tools-->Restart Testnet
可以在测试网多玩一玩 ⚱
-
Connect, 连接区块的时候,可能不会很顺利,Clash 开 Direct 会好一些,如下图
-
领水合集
-
面板介绍
-
-
-
-
-
-
介绍下左边的这几个面板
-
Transactions 指的是你作为接收方 或者 发送方的 tx
-
Send, 是给某个地址发送 BTC,
- payto 字段是发送给谁
- label 是标识字符,类似于注释
- amount 是发送多少
- Fee 这里,可以自己拖动来调节 gas, 最后的 Fee = tx 大小 * gas
-
Receive 这里,即你可以选择用某个地址 接受外部转账
-
Address 这里注意,这里面的 Address 都是你可以用的地址,由于一套助记词生成 N 多地址,所以这些地址都归属于你了,他们名下的 UTXO 你也都可以用,如果想用某个 UTXO, 直接选择该 UTXO, 然后 “Send Selected” 即可 如下图
-
UTXOs 这一栏,即你可以花的 UTXO, 与上面同理,想花哪个选中,选择小飞机图标即可,如下图
-
Setting 这一栏,就不过多叙述了 :walking:
-
-
-
BRF 实践
- txB 替代 txA, 针对的是 “我嫌弃 gas 太低,想快点成交” 这种情况,大概原理如下
- 我首先发起 txA, 用 tb1qn2zt7xzc4nwe4m5rzg8jt4gr446h069vjunapj 地址中的一个面值为 1282sats 的 utxo (简称 U1), 给 tb1q66spu0n20ru23yhc6katlwu4j9xl4sn9yxrnwh 这个地址转账 1131sats, gas 花 151stas. (151 + 1131 = 1282)
- 后面发起 RBF, 即为 txB, 用上面的 U1 以及 另外一个面值为 1712sats 的 UTXO (简称 U2), 这两个 utxo, 作为 input, 给 tb1q66spu0n20ru23yhc6katlwu4j9xl4sn9yxrnwh 这个地址 转了 2610sats, gas 花了 384, (1282 + 1712 = 2610 + 384)
- 最后可见,txB 成交,而 txA 并没有成交
- 这一笔之所以用两个 UTXO, 是因为 U1 的 balance 不足以支撑 txB
- txB 替代 txA, 针对的是 “我不想给老王钱了,想赖掉” 这种情况,大概原理如下
- 我发起 txA, 用 tb1qn2zt7xzc4nwe4m5rzg8jt4gr446h069vjunapj 地址中的一个面值为 8135sats 的 utxo (简称 U1), 给 tb1q4eqr370h7w37quke9nes5yc9ncnpctfpejv8df 地址转账 294sats, gas 为 158sats
- 后发起 txB, 同样用 U1, 给 tb1q4eqr370h7w37quke9nes5yc9ncnpctfpejv8df 转账 294sats, gas 为 748
- 最后 txB 成交,txA 没有成交
- txB 替代 txA, 针对的是 “我嫌弃 gas 太低,想快点成交” 这种情况,大概原理如下
-
CPFP 实践
- 父交易 和 子交易, 大概经过如下
- 我首先发起父交易,即 tb1qn2zt7xzc4nwe4m5rzg8jt4gr446h069vjunapj (简称地址 A) 一张面额为 12281sats 的 UTXO (U1) 作为 input, 向 tb1q4eqr370h7w37quke9nes5yc9ncnpctfpejv8df (简称地址 B) 转账 1000sats, 其余的 11140sats 退回到 tb1qzk35rutqjcuj7la95hvvcdqkczjv7dqwtyh6ls (简称地址 C)
- 然后我用地址 C 收到的 11140sats, 发起向 tb1q80262jz5ytdfhj38ur4l7duect6qppc4j6unj7 (简称地址 D) 转账 1000sats 的子交易.
- 由于子交易的提速,所以父交易的有效费率 由 1.01-->1.43, 而子交易的有效费率 由 1.85-->1.43
- 父交易 和 子交易, 大概经过如下
-
再强调一点,玩 BRC20 的话,不要 RBF, 用 CPFP (至于为什么 我了解不多,不多说)
-
Sparrow 中,想发起加速的时候,Fee 和 amount 为什么标红?
- 如果有一个 utxo, 并不是自己发起的,只是别人给我的,并且这个 UTXO 的 value 只有 546, 那就是太小了,
- 换句话说,这个 UTXO 的余额 不足以支撑新 UTXO 的输入 以及 提升 gas 的费用 (即不足以支付 children)
感谢康纳和 alex 两位大哥的技术指导