一文说明比特币铭文 Ordinals 和 BRC20 协议的原理
本文旨在帮助有比特币 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 协议建议
- 每个地址下只保存一个铭文
- 只使用支持 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
中心化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…
我也不确定是否严格按这个规则,不过大家可以注意到,比特币只能确保铭文不可篡改和双花,但是这些 BRC20 的“共识”和 index 系统都是链下的,也就是所谓中心化的,这个也就是目前最被诟病的一点。账本确实是不可篡改的,但是解读统计要依靠“人”来进行。当然如果你认为有问题,可以自己去对账,但是如果对方耍赖貌似也没啥办法。其次是要获得当前状态,需要完全遍历所有的铭文,确实效率非常低下。
总之 BRC20 协议因为实在太土狗,优点是确实公平、透明。大家都是先到先得,项目方也只能老老实实花钱 Mint。缺点是完全靠对这四个字符的信仰,99% 是割韭菜项目。
如果你能够看到最后,那我强烈推荐你听一期橙皮书关于 BRC20的播客