发布在即,关于 Runes 协议你应该知道些什么?

本文首次发布时间为 2024 年 4 月 17 日。

我们距离 BTC 减半的 840000 区块还有不到一周的时间,这也意味着整个 BTC 生态期待已久的 Runes 即将上线,作为 BTC 生态规模最大的公平发射,虽然可能面临着巨大的竞争内卷压力,但这仍是目前加密世界最巨大且公开的 alpha 机会。

虽然目前 OKX 钱包、Unisat 等平台已经提供了公共的蚀刻平台,但想要在竞争中拿到更多筹码,运行自己的比特币全节点与索引,并了解 Runes 运行的相关原理,从而针对性地进行优化将带来一定的优势。

本文就尝试从技术实现、分发规则、预估成本等部分介绍 Runes 。

Runes 协议是 Ordinals 创始人 Casey 部署在比特币网络上发行同质化代币的资产协议,Runes 的基本面也就是其 Ordinals 协议的正统性与公平分发的窗口,Ordinals 社区需要借助 Runes 争取 BTC 生态代币资产的定价权,Casey 甚至喊话 Runes 生态上线一个月后不到 10 亿美金市值就切腹自尽...

可以预计,减半后 Runes 协议将带来十分活跃的链上交互,可以关注的热点将包括但不限于

  • Casey 在 Runes 协议中硬编码的创世符文

  • Rsic、Runestone 等 NFT 对应的 Runes 代币空投

  • 社区主导的 Runes 代币的部署和 fomo

原理

Brc20 的方式被称为铭刻,即将代币数据写入隔离见证的签名中,并将数据绑定在一个特定的聪上。本质上这是把 BTC 当为存储空间,转账完全依赖链下的 Brc20 索引账本,为了保证交易的合法,Brc20 的转账必须先通过铭刻将对应代币变为可转移状态,再通过第二个交易转移对应铭刻后的 UTXO 完成转账。

Atomicals 的方式被称为染色,Arc20 的余额依靠一笔 UTXO 下的聪数量表示,严格遵循 1 token = 1 sats 的对应关系,因此 Arc20 的转账可以完全被 BTC 网络当作一般的交易处理,索引较为简单,可以使用 BTC 原生特性。

Runes 的方式被称为蚀刻,一笔 Runes 的余额被绑定在一笔 UTXO 下,对这笔余额数量、代币符号等信息的数据被记录在这笔交易的 OP-RETURN 下,OP-RETURN 可以看作是这笔交易的备注(最大 80 个字节),其数据包含的 json 标注了该 BTC 交易下 utxo 表示了多少数量的 Runes 代币,识别这些代币需要 Runes 的索引器。

总而言之,Runes 绑定 BTC UTXO,或者将 BTC UTXO 视为 Runes 代币的指针,OP-RETURN 就是指针的赋值语句。

当 Runes 代币进行转移时,需要将代表了 Runes 代币的 UTXO 作为输入,在 OP-RETURN 写入转账的数量,与指定的 utxo 作为第一个输出,设定数量的 Runes 代币将转移到 utxo1 的目标地址,而剩下的 Runes 代币会自动按顺序与其他 utxo 如 utxo2 绑定。utxo1 可以输出给别人的地址,utxo2 可以输出给自己作为找零,这样就完成了一次 Runes 转账。同时 Runes 还附带了 burn 的功能,可声明销毁代币。

与 Brc20 仅使用 BTC 存储转账记录不同, Runes 代币严格 UTXO 绑定,允许其适用 BTC UTXO 所附带的各种好处;该方式与 Arc20 类似,但不同点在于,Runes 的 utxo 可以表示任意数量的代币,而 Arc20 的数量严格与绑定 UTXO 下包含的 sats 数量有关(难以分拆);但同时,Arc20 也更不依赖索引器,Runes 代币转账的合法性依然需要 Ord 索引账本的记录。

JSON
struct Runestone {
edicts: Vec<Edict>,
etching: Option<Etching>,
mint: Option<RuneId>,
pointer: Option<u32>,
}
struct Edict {
id: RuneId
amount: u128,
output: u32,
}

OP-RETURN 下 json 数据的灵活性,允许其一次性操作 Runes 代币的批量转账,包括将不同类型 Rune 资产如 RuneA 与 RuneB 在同一个比特币交易中转移。

分发规则

在 Runes 代币的初始分发流程下,首先需要先蚀刻代币信息与分发规则。

代币信息这包括了最小拆分单位、资产名字、名字的符号分割符、符号等,要注意的是,Runes 资产的名字不限长度,并包括 • 这类的分割符,可能会比较复杂,在铸造新资产的时候一定要注意识别。

JSON
struct Etching {
divisibility: Option<u8>,
premine: Option<u128>,
rune: Option<Rune>,
spacers: Option<u32>,
symbol: Option<char>,
terms: Option<Terms>,
}

在分发规则部分,Runes 允许部署者进行预分配,将代币分配给自己,因此要注意识别是否为公平发射,此功能可以用于 Runestone、Rsic 这类资产的分发。

在分发规则的 Terms 数据下,包含了单次 Mint 代币数量限制、总共 mint 张数、mint 的开始与结束区块这些数据。这里可以将总 mint 次数设定为无上限,限时不限量,casey 部署的 0 号符文 UNCOMMON•GOODS 就是这样。

JSON
struct Terms {
amount: Option<u128>,
cap: Option<u128>,
height: (Option<u64>, Option<u64>),
offset: (Option<u64>, Option<u64>),
}

同时,用户自发的 mint 过程需要在 OP-RETURN 下写入 Runestone 的数据类型(与符文 NFT Runestone 无关),一次交易只能 mint 一次,因此想要获取更多的筹码,就需要在一个地址下分多个 UTXO 进行。

Runes 会在 840000 区块开始,ord 索引也已经更新到最新版本 0.18.1,现已充分支持 runes 代币查询、etch(等同于 Brc20 的 deploy)、mint 等功能,同时 Casey 也表示将部署一部分 Runes 代币硬编码到 ord 索引器中,在减半区块激活。这些资产完全公平分发,可自由 mint,Casey 曾提到过的名字有 COMMUNISTRUNE 、ANARCHISTRUNE 、CYPERPUNKRUNE。现在索引中已经可以看到名为 UNCOMMOM.GOODS 的创世符文。

Runes 资产名称的部署被 Ord 索引进行了限制,13 - 26 字符的名字在 840000 区块后就可以自由部署,12 位字符的名字被逐步解锁。每过 17,500 个区块后(大约 120 天)就解锁更短一位的名字的部署,因此要 mint 到 4 字符的代币,需要等待 3 年时间。

虽然早期超长的名称并不利于炒作,但好在能设计特殊的符号来表示资产,这个符号符合 Unicode 标准,因此可以写入很多 emoji 表情,选一个好的 emoji 也是部署 meme 时需要注意的。

预估成本

当前的 Runes 的协议代码基本已经确定,并在测试网运行了一段时间,因此可以进行一些成本的预测。我们通过在 signet 上运行 ord 索引已经可以看到 signet 测试网上部署了多达 497 个 runes 的测试代币,testnet 测试网上更是多达 963 个。同时我们也在 signet 进行了一些实验和测试,以测算 mint 时的成本花费和进度。

Signet 测试网 0~9 号 Runes 代币:

Plain Text
THESE•WILL•BE•WORTHLESS
GREG•GREG•GREG
CUBS•FIRST•RUNES•TOKEN
AMAZING•KODA•FART
SORA•PARTY•STARTS•FIVE•DOLLARS
WAKE•N•BAKE
RECURSIVE•ROBOTS•RUNES•TEST
FRENCH•WON
SATOSEA•XYZ

我们在 signet 测试网进行了多笔 runes 代币的 mint,ord 命令:

Bash
$ ord --index-runes --bitcoin-rpc-password xxx --bitcoin-rpc-username xxx -s wallet mint --fee-rate 1 --rune HARRY•POTTER•OBAMA•SONIC•IO•INU
{
"rune": "HARRY•POTTER•OBAMA•SONIC•IO•INU",
"pile": {
"amount": 1000,
"divisibility": 0,
"symbol": "🧹"
},
"mint": "645829bdaf105ccecc012629a3bbb6e9dfcfe92fa09499ea54b87092c9100946"
}

交易如下:https://mempool.space/zh/signet/tx/645829bdaf105ccecc012629a3bbb6e9dfcfe92fa09499ea54b87092c9100946

指定 destination 作为接收 Runes 代币的地址:

Bash
$ ord --index-runes --bitcoin-rpc-password xxx --bitcoin-rpc-username xxx -s wallet mint --fee-rate 1 --rune MAOBY•THE•CUTEST•CAT --postage 1000sat --destination tb1p43k8gxevpc0x3hthv9dm33589gecn8mr4rkl303js3gtvmpehltqg2mmc4
{
"rune": "MAOBY•THE•CUTEST•CAT",
"pile": {
"amount": 100,
"divisibility": 0,
"symbol": "🐈"
},
"mint": "32125d247a282ebf53b893a17f3c2c99a7747749233dc010bd9ae2934540c981"
}

交易如下:https://mempool.space/zh/signet/tx/32125d247a282ebf53b893a17f3c2c99a7747749233dc010bd9ae2934540c981

可以看到,一次 mint 交易大概会消耗 230vB 大小,参考市场热度推测 fomo 情绪,若以 feerate 在极端情况下为 300-1000 sats/vB 来计算,mint 一张的成本约是 0.0023-0.00069 BTC(150u-50u),同时 ord 支持指定 destination 地址,因此可以拆分 utxo 后可以批量 mint 到目标地址。

若减半后 fomo 情绪高涨,前期每个区块有 3000 笔 transactions 为 Runes mint 交易的情况下,以 feerate 平均为 200 sats/vb 计算,一天 Runes 代币的 mint 约消耗 198.72 btc 的 gas 成本,将可以为计算早期 fomo 筹码市值提供一些参考。

Subscribe to Trustless Labs
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.