猎聪
寻找稀有序数是困难但有回报的。拥有一个钱包,里面装满了散发着稀有和奇特聪的香气的 UTXO,这种感觉无与伦比。
序数是为聪(satoshi)编号的数字。每个聪都有一个序数,每个序数都对应一个聪。如果你想成为稀有聪的猎人,你应该认真阅读本章节的内容
准备工作
在开始之前,你应该需要做的一些事情
-
首先,你需要一个已同步的带有交易索引的 Bitcoin Core 节点。要开启交易索引,在命令行里使用
-txindex:bitcoind -txindex或者将以下内容放入你的 比特币配置文件:
txindex=1启动它并等待其同步到链尖,此时以下命令应打印出当前的区块高度:
bitcoin-cli getblockcount -
其次,你需要一个已同步的
ord索引。-
从 ord 仓库 获取
ord的副本。 -
运行
ord --index-sats server。它应该会连接到你的比特币核心节点并开始索引。 -
一旦索引完成,保持服务器运行,并在一个单独的终端会话中提交新的
ord命令。
-
-
第三,你需要一个包含你想要搜索的 UTXO 的钱包。
搜索稀有的序数
在一个Bitcoin Core的钱包里搜索稀有的序数
命令 ord wallet 只是比特币核心 RPC API 的一个封装,所以在比特币核心钱包中搜索稀有序数很容易。假设你的钱包名为 foo:
-
加载你的钱包
bitcoin-cli loadwallet foo -
显示钱包
foo的 UTXO 中的任何稀有序数:ord --index-sats wallet --name foo sats
在非Bitcoin Core钱包里搜索稀有的序数Ordinals
命令 ord wallet 只是比特币核心 RPC API 的一个封装,所以要在非比特币核心钱包中搜索稀有序数,你需要将钱包的描述符导入到比特币核心中。
描述符 描述了钱包生成私钥和公钥的方式。
你应该只将钱包公钥的描述符导入到比特币核心中,而不是私钥。
如果你的钱包公钥描述符被泄露,攻击者将能够看到你的钱包地址,但你的资金将是安全的。
如果你的钱包私钥描述符被泄露,攻击者可以耗尽你钱包中的资金。
-
从你想要搜索稀有序数的 UTXO 所在的钱包中获取钱包描述符。它看起来会像这样:
wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#csvefu29 -
创建一个名为 foo-watch-only 的仅观察钱包:
bitcoin-cli createwallet foo-watch-only true true你可以给它起一个比 foo-watch-only 更好的名字!
-
加载
foo-watch-only钱包:bitcoin-cli loadwallet foo-watch-only -
将你的钱包描述符descriptors导入到 foo-watch-only 中:
bitcoin-cli importdescriptors \ '[{ "desc": "wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)#tpnxnxax", "timestamp":0 }]'如果你知道你的钱包首次开始接收交易的 Unix 时间戳,你可以使用它来替代 "timestamp" 的值 0。这将减少比特币核心搜索你钱包 UTXO 所需的时间。
-
检查一切是否正常
bitcoin-cli getwalletinfo -
显示你钱包里的稀有序数Ordinals
ord wallet sats
在导出多路径描述符的钱包里搜索稀有的序数Ordinals
一些描述符使用尖括号(例如 <0;1>)在一个描述符中描述多个路径。比特币核心目前还不支持多路径描述符,所以你需要先将它们转换为多个描述符,然后将这些多个描述符导入到比特币核心中。
-
首先从你的钱包获取多路径描述符。它看起来会像这样:
wpkh([bf1dd55e/84h/0h/0h]xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/<0;1>/*)#fw76ulgt -
创建接收地址路径的描述符:
wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/0/*)以及找零地址路径的描述符:
wpkh([bf1dd55e/84'/0'/0']xpub6CcJtWcvFQaMo39ANFi1MyXkEXM8T8ZhnxMtSjQAdPmVSTHYnc8Hwoc11VpuP8cb8JUTboZB5A7YYGDonYySij4XTawL6iNZvmZwdnSEEep/1/*) -
获取并记下接收地址描述符的校验和,在这个例子中是
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 } -
加载你要导入描述符的钱包:
bitcoin-cli loadwallet foo-watch-only -
现在将带有正确校验和的描述符导入到比特币核心中:
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 所需的时间。 -
检查一切是否正常
bitcoin-cli getwalletinfo -
显示你钱包里的稀有序数Ordinals
ord wallet sats
输出描述符
麻雀钱包
导航到 设置 标签,然后到 脚本策略,按下编辑按钮以显示描述符。
转移Ordinals
ord 钱包支持通过使用 satoshi 的名称来转移特定的 satoshi。要发送名为 zonefruits 的 satoshi,可以执行以下操作:
ord wallet send <RECEIVING_ADDRESS> zonefruits --fee-rate 21
你也可以使用 bitcoin-cli 命令 createrawtransaction、signrawtransactionwithwallet 和 sendrawtransaction,但这种方法可能比较复杂,超出了本指南的范围。