一文说明比特币铭文 Ordinals 和 BRC20 协议的原理

Lebing Xie
 

·
 

 
 
 
 

本文旨在帮助有比特币 UTXO 背景知识的朋友来快速了解和 ordinals 和 BRC20 相关的铭文(Inscriptions)技术原理。你搜索网上的资料,一般会如此用现实世界来比喻铭文:

如果把比特币体系比喻成美钞,那么每个聪(Satoshi)类似1 美元的钞票。每张钞票都有自己的编号,是独一无二的。每张 1 美元钞票价值相等,这时候让中本聪在某张钞票上签字,那么这张钞票顿时就成了价值连城的收藏品。这张有签名的钞票就是一个 NFT,美元的编号就是 ordinals number。

下列几个视频非常清晰地说明了 ordinals 编号和铭文的原理。需要注意的是,现实美钞上印了编号,但是 ordinals 的编号并没有在比特币主链上写入任何编号相关的信息。每个聪都是来自挖矿产生的区块(coinbase),然后通过 UTXO 不断转手。任何一个聪都可以根据 UTXO 回溯到产生它的那个区块。coinbase 是可以定位自己序号的,那么这个聪自然也能定位自己的序号。这个编号过程只是利用了比特币的链上信息,自己制定了一个标准来计算序号。完全没有向链上写任何标记,也不是比特币 core 的功能,所以不是比特币共识的一部分。需要一个外界系统来计算,而且需要大家认可这个公式,所以并非去中心化的共识。

ordianls 的铭文确实是在链上写了数据,铭文的 meta data 和数据(可以是NFT 的 binary)写在了UTXO 中 OP_FALSE 后面的“信封”里面。一般这个 UTXO 的 OUT 的第一个聪就是代表了这个铭文,被称为关健聪。这个聪日后转手到哪个地址,哪个地址就拥有了这个铭文。可以说 Ordinals 利用 UTXO 解决了双花问题。

请注意,铭文只在创建时候在 UTXO 写一次,日后关键词转手的 UTXO 里面是不需要拷贝铭文的!UTXO 本身是无状态的,按照涉及这个聪的 UTXO 回溯,总是能找到创建铭文的 UTXO 了。

定位和展示铭文的规则也不是比特币共识的一部分,需要一个单独的系统来追踪。

Ordinals 的铭文既然是和关健聪相关联,如果将这个聪误转给他人或者作为手续费转给矿工,那么就等于把铭文白送给其他人。所以 ordianls 协议建议

  1. 每个地址下只保存一个铭文
  2. 只使用支持 ordinals 协议的专用钱包来进行铭文操作。因为 BTC 是等价 Token,所以普通 BTC 钱包无需考虑某个 UTXO 是否包括带铭文的聪。转账的时候随便挑几个 UTXO 凑够数就行,很容易把其他关键词送给别人。

理论上用标准比特币客户端管理 ordinals 铭文技术上是可行的,不过 ordinals 还是提供了 reference implementation ,叫做 ord。网上介绍的各种 ordinals 钱包都是专门支持 ordinals 协议,能够提供自动识别关健聪,回溯展示铭文。

Ordinals UTXO 结构官方文档

https://docs.ordinals.com/guides/collecting/sparrow-wallet.html

官方钱包实操

https://www.youtube.com/watch?v=1LMPekZRu9A

英文详解 ordinals UTXO结构

https://www.youtube.com/watch?v=z8gtUPtji1c

中文详解

https://www.youtube.com/watch?v=ZeshVqNirkY

中文说明文章

https://zhuanlan.zhihu.com/p/631214122

https://medium.com/@bun919tw/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3-bitcoin-nft-ordinals-3811b0eb9fed

https://www.odaily.news/post/5187233

你自己写个 ordinals 铭文是非常容易的,写啥都可以(遗嘱、海誓山盟、照片等等),成本就是矿工的手续费。如果你写的铭文文本是遵循 BRC20 协议,就等于在比特币主链上自己发自己的同质化代币了。基于以太坊自己发土狗币的协议叫 ERC20,有了后来的 ICO 热潮。如果你搞明白了 ordinals 协议,那么 BRC20 非常容易理解,

BRC20中文讲解

https://www.youtube.com/watch?v=HDZJM4uebSo

只要四个字符名字没有被占用,任何人都能自己发币(deploy)。和发 ordinals 铭文一样,成本就是矿工手续费。后续挖矿(mint)的成本也就是手续费,lim 限制铸造一张铭文最多挖几个币,否则一铲子全挖完了。

转移(transfer)BRC20 代币(铭文)有点特殊,分成了铸造转移铭文和发送这个铭文两个步骤。我开始百思不得其解,为啥不能一步完成,UTXO 直接写接收方地址?后来四处咨询才了解分成两步是为了安全原因,等于是起来个确认作用,写成一步原理上也是可行的。

和 ordinals 一样,BRC20 也不是比特币共识的一部分,只是利用了比特币的不可篡改特性。BTC 不支持智能合约,所以和 ERC20 不同,BRC20 真的就是一张张铭文。所有创建、铸造和转移都是一张张铭文,写在比特币主链这个大写字板上。确认当前 owner 拥有的代币数量的时候就需要回放所有的铭文,有点类似 ECR20的验证方法。这种平台叫做indexer,用来验证各种 BRC20的链下共识,例如

  • tik 的四个字符之前有没有被占用,后来重复的同名 deploy 就无效了
  • Mint 有没有超过发行量,超过之后的也都无效了
  • 转出操作时某个地址是否有足够代币,否则此操作无效
  • 汇总某个地址转入和转出铭文,就计算出拥有的代币总量

BRC20 Indexer Rule

BRC-20 Indexer Rules

Detailed rules of BRC-20 Indexing

docs.bestinslot.xyz

 

中心化Indexer 的风险

Bitcoin Oracle: Building an On-Chain BRC20 “Indexer of Indexers”

ALEX will soon ship the first Bitcoin Oracle for BRC20 tokens. This hasn’t been a solo effort: we’ve been in…

medium.com

 

我也不确定是否严格按这个规则,不过大家可以注意到,比特币只能确保铭文不可篡改和双花,但是这些 BRC20 的“共识”和 index 系统都是链下的,也就是所谓中心化的,这个也就是目前最被诟病的一点。账本确实是不可篡改的,但是解读统计要依靠“人”来进行。当然如果你认为有问题,可以自己去对账,但是如果对方耍赖貌似也没啥办法。其次是要获得当前状态,需要完全遍历所有的铭文,确实效率非常低下。

总之 BRC20 协议因为实在太土狗,优点是确实公平、透明。大家都是先到先得,项目方也只能老老实实花钱 Mint。缺点是完全靠对这四个字符的信仰,99% 是割韭菜项目。

如果你能够看到最后,那我强烈推荐你听一期橙皮书关于 BRC20的播客

https://podcasts.apple.com/us/podcast/%E6%AF%94%E7%89%B9%E5%B8%81%E7%8B%BC%E7%83%9F%E5%86%8D%E8%B5%B7-%E9%93%AD%E6%96%87-brc20-%E5%92%8C%E6%95%B0%E5%AD%97%E4%B8%96%E7%95%8C%E7%9A%84%E6%9D%83%E5%8A%9B-e21/id1564192963?i=1000637920123&l=zh-Hans-CN