skyone

skyone

Hello, World

Sparrow Wallet (Bitcoin)

image

Photo by Artūras Kokorevas

Sparrow Wallet (Bitcoin)#

理论#

  1. 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 分别是
        1. 85 (返回给自己的 UTXO), 会返回给你自己的钱包,
        2. 10 (这个 UTXO, 即面额为 10 的纸币) 是给到了对方的钱包
        3. 5 (面额为 5 的纸币) 是给到了矿工的钱包
      • 后面你再花钱,只能花这 1 张纸币 (面额为 85). 作为交易的输入,去发起新的 transaction.
      • 最后 你想给把自己面额 85 的 UTXO 拆掉,拆成 30+50, 那么你发起第二笔 tx, 接收方是自己,面额为 50. 那么,input 是 85 的 UTXO, output 有三个
        1. 自己发给自己,面额为的 50 的 UTXO
        2. 剩下的面额为 30 的 UTXO
        3. 还有面额为 5 的 UTXO 进了矿工的钱包
  2. 加速交易的两种方法

    ❤️ ❤️ ❤️ 不管你用 RBF 还是用 CPFP, 都需要确保自己 UTXO 的 Balance 是足够的,不然是无法加速的 ❤️ ❤️ ❤️

    1. RBF, 全称为Replace-by-fee, 即未确认的 transaction, 可以用新的 transaction (并给予新 tx 更高的 gas) 来替代掉,

      • 首先明确 只有是你自己的 UTXO 作为 input, 才能去发起 RBF 🍎

      • 其次,来Here查看你的 tx 是否可以 RBF, 比如下面这一笔就可以进行 RBF

      image

      • 最后 举个例子来说明,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 之后,我想加速一下 (这里有两个方面)
          1. 我不想给老王钱了,想赖掉
            • 那么这时候就可以用 RBF 来加速,发起一笔新的 tx, 称之为 tx2, tx2 是利用面额为 50 的这笔 UTXO, 给自己转 20, gas 设置为 10.
            • 这笔 tx2 完成之后
              • 我的钱包里会有 20 + 20 + 30, 这三张 UTXO
              • 老王的钱包只有 10, 一张 UTXO
              • 矿工的钱包里有 5+5+10, 三张 UTXO
            • tx2 会成交,因此可以赖掉给老王的转账 🍓
          2. 我嫌弃 gas 太低,想快点成交
            • 同样可以用 RBF 进行交易,发起一笔新的 tx2, 利用面额为 50 的这笔 UTXO, 给老王转账 10, gas 设置为 10
            • 那么 tx2 完成之后
              • 我的钱包里会有 30+30 这两张
              • 老王钱包里会有 10+10 这两张
              • 矿工钱包里 则是 5+5+10, 这三张
    2. 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.

实践#

  1. Sparrow Wallet来说,启动 testnet >>>> Tools-->Restart Testnet

    image

    可以在测试网多玩一玩 ⚱

  2. Connect, 连接区块的时候,可能不会很顺利,Clash 开 Direct 会好一些,如下图

    image

  3. 领水合集

    1. https://testnet-faucet.com/btc-testnet/
    2. https://bitcoinfaucet.uo1.net/send.php
    3. https://testnet-faucet.mempool.co/
  4. 面板介绍

    • image

    • image

    • image

    • image

    • image

      • 介绍下左边的这几个面板

      • Transactions 指的是你作为接收方 或者 发送方的 tx

      • Send, 是给某个地址发送 BTC,

        • payto 字段是发送给谁
        • label 是标识字符,类似于注释
        • amount 是发送多少
        • Fee 这里,可以自己拖动来调节 gas, 最后的 Fee = tx 大小 * gas
      • Receive 这里,即你可以选择用某个地址 接受外部转账

      • Address 这里注意,这里面的 Address 都是你可以用的地址,由于一套助记词生成 N 多地址,所以这些地址都归属于你了,他们名下的 UTXO 你也都可以用,如果想用某个 UTXO, 直接选择该 UTXO, 然后 “Send Selected” 即可 如下图image

      • UTXOs 这一栏,即你可以花的 UTXO, 与上面同理,想花哪个选中,选择小飞机图标即可,如下图image

      • Setting 这一栏,就不过多叙述了 :walking:

  5. BRF 实践

    1. 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
    2. txB 替代 txA, 针对的是 “我不想给老王钱了,想赖掉” 这种情况,大概原理如下
      • 我发起 txA, 用 tb1qn2zt7xzc4nwe4m5rzg8jt4gr446h069vjunapj 地址中的一个面值为 8135sats 的 utxo (简称 U1), 给 tb1q4eqr370h7w37quke9nes5yc9ncnpctfpejv8df 地址转账 294sats, gas 为 158sats
      • 后发起 txB, 同样用 U1, 给 tb1q4eqr370h7w37quke9nes5yc9ncnpctfpejv8df 转账 294sats, gas 为 748
      • 最后 txB 成交,txA 没有成交
  6. CPFP 实践

    1. 父交易子交易, 大概经过如下
      • 我首先发起父交易,即 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
  7. 再强调一点,玩 BRC20 的话,不要 RBF, 用 CPFP (至于为什么 我了解不多,不多说)

  8. Sparrow 中,想发起加速的时候,Fee 和 amount 为什么标红?

    1. 如果有一个 utxo, 并不是自己发起的,只是别人给我的,并且这个 UTXO 的 value 只有 546, 那就是太小了,
    2. 换句话说,这个 UTXO 的余额 不足以支撑新 UTXO 的输入 以及 提升 gas 的费用 (即不足以支付 children)

感谢康纳和 alex 两位大哥的技术指导

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。