猎聪

寻找稀有序数是困难但有回报的。拥有一个钱包,里面装满了散发着稀有和奇特聪的香气的 UTXO,这种感觉无与伦比。

序数是为聪(satoshi)编号的数字。每个聪都有一个序数,每个序数都对应一个聪。如果你想成为稀有聪的猎人,你应该认真阅读本章节的内容

准备工作

在开始之前,你应该需要做的一些事情

  1. 首先,你需要一个已同步的带有交易索引的 Bitcoin Core 节点。要开启交易索引,在命令行里使用 -txindex :

    bitcoind -txindex
    

    或者将以下内容放入你的 比特币配置文件

    txindex=1
    

    启动它并等待其同步到链尖,此时以下命令应打印出当前的区块高度:

    bitcoin-cli getblockcount
    
  2. 其次,你需要一个已同步的 ord 索引。

    • ord 仓库 获取 ord 的副本。

    • 运行 ord --index-sats server。它应该会连接到你的比特币核心节点并开始索引。

    • 一旦索引完成,保持服务器运行,并在一个单独的终端会话中提交新的 ord 命令。

  3. 第三,你需要一个包含你想要搜索的 UTXO 的钱包。

搜索稀有的序数

在一个Bitcoin Core的钱包里搜索稀有的序数

命令 ord wallet 只是比特币核心 RPC API 的一个封装,所以在比特币核心钱包中搜索稀有序数很容易。假设你的钱包名为 foo

  1. 加载你的钱包

    bitcoin-cli loadwallet foo
    
  2. 显示钱包 foo 的 UTXO 中的任何稀有序数:

    ord --index-sats wallet --name foo sats
    

在非Bitcoin Core钱包里搜索稀有的序数Ordinals

命令 ord wallet 只是比特币核心 RPC API 的一个封装,所以要在非比特币核心钱包中搜索稀有序数,你需要将钱包的描述符导入到比特币核心中。

描述符 描述了钱包生成私钥和公钥的方式。

你应该只将钱包公钥的描述符导入到比特币核心中,而不是私钥。

如果你的钱包公钥描述符被泄露,攻击者将能够看到你的钱包地址,但你的资金将是安全的。

如果你的钱包私钥描述符被泄露,攻击者可以耗尽你钱包中的资金。

  1. 从你想要搜索稀有序数的 UTXO 所在的钱包中获取钱包描述符。它看起来会像这样:

    wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#csvefu29
    
  2. 创建一个名为 foo-watch-only 的仅观察钱包:

    bitcoin-cli createwallet foo-watch-only true true
    

    你可以给它起一个比 foo-watch-only 更好的名字!

  3. 加载 foo-watch-only 钱包:

    bitcoin-cli loadwallet foo-watch-only
    
  4. 将你的钱包描述符descriptors导入到 foo-watch-only 中:

    bitcoin-cli importdescriptors \
      '[{ "desc": "wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#tpnxnxax", "timestamp":0 }]'
    

    如果你知道你的钱包首次开始接收交易的 Unix 时间戳,你可以使用它来替代 "timestamp" 的值 0。这将减少比特币核心搜索你钱包 UTXO 所需的时间。

  5. 检查一切是否正常

    bitcoin-cli getwalletinfo
    
  6. 显示你钱包里的稀有序数Ordinals

    ord wallet sats
    

在导出多路径描述符的钱包里搜索稀有的序数Ordinals

一些描述符使用尖括号(例如 <0;1>)在一个描述符中描述多个路径。比特币核心目前还不支持多路径描述符,所以你需要先将它们转换为多个描述符,然后将这些多个描述符导入到比特币核心中。

  1. 首先从你的钱包获取多路径描述符。它看起来会像这样:

    wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/<0;1>/*)#fw76ulgt
    
  2. 创建接收地址路径的描述符:

    wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)
    

    以及找零地址路径的描述符:

    wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/1/*)
    
  3. 获取并记下接收地址描述符的校验和,在这个例子中是 tpnxnxax

    bitcoin-cli getdescriptorinfo \
      'wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)'
    
    {
      "descriptor": "wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#csvefu29",
      "checksum": "tpnxnxax",
      "isrange": true,
      "issolvable": true,
      "hasprivatekeys": false
    }
    

    以及找零地址描述符的校验和,在这个例子中是 64k8wnd77:

    bitcoin-cli getdescriptorinfo \
      'wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/1/*)'
    
    {
      "descriptor": "wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/1/*)#fyfc5f6a",
      "checksum": "64k8wnd7",
      "isrange": true,
      "issolvable": true,
      "hasprivatekeys": false
    }
    
  4. 加载你要导入描述符的钱包:

    bitcoin-cli loadwallet foo-watch-only
    
  5. 现在将带有正确校验和的描述符导入到比特币核心中:

    bitcoin-cli \
     importdescriptors \
     '[
       {
         "desc": "wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#tpnxnxax"
         "timestamp":0
       },
       {
         "desc": "wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/1/*)#64k8wnd7",
         "timestamp":0
       }
     ]'
    

    如果你知道你的钱包首次开始接收交易的 Unix 时间戳,你可以使用它来替代 "timestamp" 字段中的 0。这将减少比特币核心搜索你钱包 UTXO 所需的时间。

  6. 检查一切是否正常

    bitcoin-cli getwalletinfo
    
  7. 显示你钱包里的稀有序数Ordinals

    ord wallet sats
    

输出描述符

麻雀钱包

导航到 设置 标签,然后到 脚本策略,按下编辑按钮以显示描述符。

转移Ordinals

ord 钱包支持通过使用 satoshi 的名称来转移特定的 satoshi。要发送名为 zonefruits 的 satoshi,可以执行以下操作:

ord wallet send <RECEIVING_ADDRESS> zonefruits --fee-rate 21

你也可以使用 bitcoin-cli 命令 createrawtransactionsignrawtransactionwithwalletsendrawtransaction,但这种方法可能比较复杂,超出了本指南的范围。