Ordinals 使用指南

Ordinals 上手门槛有点高了。希望你最好是学 CS 的。

安装

1. 准备工作

  • 一块足够大的硬盘:ord 需要开启 txindex,这个选项和区块存储修剪互斥,所以需要存储全量数据。截止2023-02,单 btc 数据量是 527GB,ord 索引 117 GB,为了不至于频繁升硬盘,建议硬盘 2TB 以上;
  • 豁出去 SSD 写入量,完整 index 写入量在 20TB 左右;
  • 足够多的内存:至少 32GB 内存;少于 32GB 会频繁走虚拟内存,耗时非常久,而且很容易把 SSD 干废,不建议尝试;
  • 如果是未开采过 ord 的 raw btc ,按现在的供应量来看,大概每 25 个 btc 会有一个最低配的稀有 sat。如果你的 btc 数量比较少,或者 btc 是刚从交易所提的,那可能折腾了也白折腾;
  • cmd 窗口顶部白条右键,点默认值,关闭快速编辑模式,再顶部白条右键,点属性,关闭快速编辑模式。否则安装 rust/编译 ord/ord indexing可能会卡住;

2. 安装 Windows 版本的 Core 钱包

  • ord 要求 core 最低版本 24.0.0,目前 bitcoin.org 最新版本还是 22.0.0,所以得在 github 上下一个 24.0.1;
  • 安装好 core 后启动,第一次启动会弹出选项:
    • 第一个选项选 使用自定义的数据目录,位置选择我们准备的这块足够大的硬盘/分区,本例中为 D:\Bitcoin
    • 第二个选项不要勾选 将区块存储限制到_GB,因为 txindex 和区块裁剪参数冲突,ord 要求开启 txindex。

为避免后续命令行输入 bitcoin daemon 完整路径,将 bitcoin daemon 加入环境变量:

  1. 打开 设置 -> 系统 -> 关于,右边栏 高级系统设置
  2. 高级 选项卡下 环境变量
  3. 选中 Path 点击 编辑
  4. 点击 新建,输入 C:\Program Files\Bitcoin\daemon,点击 确定 确定 确定

3. bitcoin.conf 设置

D:\Bitcoin 中新建文件 bitcoin.conf,内容是:

1
2
txindex=1
server=1

txindex=1 是 ord 要求的模式,server=1 是为了等下 bitcoind 启动时,bitcoin-cli 能正常连接需要加的选项,这个是 Windows 版本独有的坑。

4. 建立 core 沙箱软连接

将实际的沙箱 D:\Bitcoin 做一个软链接,链到默认位置,可以避免后面用 ord 时要输入 --bitcoin-data-dir D:\Bitcoin

1
mklink %appdata%\Bitcoin D:\Bitcoin

5. 安装 ord binary,或编译后安装 ord

0) 不想装 Visual Studio 可以下载已编译好的 ord 文件

下载列表
或者继续往下看完整编译方法:

1) 安装 rust

rust-lang.org 下载最新版 rust 安装包,默认安装需要装 Visual Studio,装就装,由它去吧。

2) clone ord

1
git clone https://github.com/casey/ord.git

考虑到 Windows 可能没装 git,直接 https://github.com/casey/ord/ 下载个 zip 包解压也行。

3) 编译 ord

1
2
cd "ord 的 clone 或解压路径"
cargo build --release

如果没报错,完成后在 .\target\release 下会有一个 ord.exe,这个文件可以拷贝到 C:\Program Files\Bitcoin\daemon 使用(因为这个加过 PATH 了)。

如果要把 ord.exe 安装在没有安装 Visual Studio 的电脑,需要一并拷贝 vcruntime140.dll(在安装过 Visual Stutio 的 PC 的 system32 文件夹里)。

启动

0. 如果是 mac,Bitcoin Core 的安装包默认不附带 bitcoind 和 bitcoin-cli,需要自行编译。安装 Xcode 最新版和 home brew,然后:

1
2
3
4
5
6
7
8
9
xcode-select --install
brew install autoconf automake pkg-config libtool
git clone url-of-bitcoin-core-0.24.1
cd bitcoin-0.24.1
sh ./autogen.sh
./configure
make 
sudo make install
which bitcoind

1. 启动 bitcoind,同步区块

命令行执行:

1
bitcoind -datadir=D:\Bitcoin -txindex

等待同步结束,网好的话大概需要2-3天。

2. bitcoin-cli 测试是否已经追上最新区块

1
bitcoin-cli -datadir=D:\Bitcoin getblockcount

如果一切正常,这个命令会显示当前区块数量。

3. 创建 ord wallet

保持 bitcoind 启动状态:

1
ord wallet create

成功后,会显示助记词,同时在 D:\Bitcoin\wallet 下生成名为 ord 的钱包。钱包名称不可修改,所以再执行 ord create wallet 会报错文件已存在。

4. 建立索引

1
ord --index-sats index

这个命令默认将索引文件写入 %appdata%\ord。如果想把索引文件也存放在 D:\,使用 --data-dir 指定索引位置:

1
ord --data-dir D:\ord ord --index-sats index

索引过程会比较久,我用 2021 款 m1 pro 跑了五天才索引完。据观察 ord 进程不是特别吃 cpu,磁盘读写也没有吃满,大概 60 MB/s,intel 处理器 / sata 硬盘应该不会慢多少,完整索引估计也是一周左右。过程中 ord 可以关闭,再次打开时会从上次的高度继续建立索引。

索引每隔 5000 个区块写入磁盘,但是高度越高的 5000 个区块需要索引的数据就越多,内存开销是随索引区块高度上升而线性上升的。如果索引的时候遇到内存不足,虚拟内存开销吃满磁盘的情况,关掉 ord 重新打开(重新打开的时候会重新从磁盘读一遍索引,IO 耗时很久);或者如果你真的有闲没内存,可以尝试改 rust 代码把 5000 调成 500(当然我没试过,加内存的成本低多了)。

索引完建议找个移动硬盘把这个宝贝 ord/index.redb 文件保存起来,万一硬盘噶了,你会感谢我这个建议的。

5. 生成收款地址,打钱!

1
ord wallet receive

成功后会生成收款地址。

可以通过 bitcoin-cli 查看已经生成的收款地址:

1
bitcoin-cli listreceivedbyaddress 1 true

然后:

  • 备份钱包文件和助记词;
  • 然后把你想筛选的 btc 打到你的地址;
  • 不用折腾导入 descriptors 了,生命是很值钱的。

6. 筛选稀有 sats

1
ord wallet sats

如果 ord index 的时候没加 --index-sats 那就骚了,会报错索引在建立时需要传入 --index-sats,需要删了索引重新来。别问我怎么知道的。

如果你钱包里没有稀有 sats 或带铭文的 sats,输出是这样的:

1
[]

有的话是这样的(*是打码了,其实是有值的):

1
2
3
4
5
6
7
8
[
  {
    "sat": 1888888880000000,
    "output": "b***************************************************************5:0",
    "offset": 1********9,
    "rarity": "uncommon"
  }
]

其中 output 是包含这枚稀有 sat 的转账脚本的 output。

7. 发送稀有 sats

首先新建一个专门用来保存 sats 的钱包;这个钱包其实没有什么特别的要求,任何钱包都可以。但是为了未来转出方便 + 保存助记词方便,用 ord wallet create 新建一个是最省心的。不建议读那篇 sparrow 的指引。

这段用 mac 命令了,过程和原理和 windows 是一样的。

备份原 ord 钱包:

1
$ mv ~/Library/Application Support/Bitcoin/wallets/ord ~/Library/Application Support/Bitcoin/wallets/backup
1
$ ord wallet create # 创建用于接收藏品的钱包

获取接收地址,记住这里生成的地址 bc1**kq6pn :

1
2
3
4
$ ord wallet receive
{
  "address": "bc1**kq6pn"
}

将接收藏品的钱包改名为 collection:

1
$ mv ~/Library/Application Support/Bitcoin/wallets/ord ~/Library/Application Support/Bitcoin/wallets/collection

还原备份的 ord 钱包:

1
$ mv ~/Library/Application Support/Bitcoin/wallets/backup ~/Library/Application Support/Bitcoin/wallets/ord

这些做完后,在 ~/Library/Application Support/Bitcoin/settings.json 中增加 collection 钱包,以便 core 能默认加载:

1
2
3
4
5
6
{
    "wallet": [
        "ord",
        "collection"
    ]
}

ordinals.com 搜索 sat 的值(例子中为 1888888880000000),查询稀有 sats 的 location,如果是稀有 sats 或刻有铭文,会展示 location:

1
2
location:
b41f***********515:0:1********9

转移稀有 sat 到 collection 钱包:

1
$ ord wallet send --fee-rate 3 bc1**kq6pn b41f***********515:0:1********9

其中:
* fee-rate 为 transaction fee,单位是 sats/vB,这个选项是必选项只能手动填入,最好先在 mempool.space 查了最新的 transaction fee 再填入一个合适的值,目前(2023 Mar 25)可以填 3;不确定手抖填成一个很大的值会不会把所有 btc 当 gas 花了,以前 eth 上有人犯过这个错误,按回车前请 check twice;
* bc1**kq6pn 为用于接收藏品的地址;
* b41f***********515:0:1********9 为藏品的 location。

其他同 ordinals.com 官方文档。

Over

Comments