BTC上的NFT(⼀) - Ordinal原理介绍

最近BTC上的NFT刷爆了整个币圈,Ordinal Loops、Ordinal Punks、Bitcoin Rocks和Ordinal Penguins都是目前大热的项目。

https://www.ordinalhub.com/
https://www.ordinalhub.com/

下面我们就从原理上来剖析在BTC链上通过Ordinal发行NFT(Ordinal官方更愿意称为数字艺术品而不是NFT)的原理。

基本概念

在正式开始之前,我们先介绍一些基本概念

聪 (Satoshis)

Satoshis(以下简称sat):也叫聪,是BTC的最小单位,1 BTC = 1 * 10^9 sat

序数 (Ordinal)

Ordinal也叫序数,是对BTC链上每“挖”出来一个sat对其进行编号排序。因为BTC一共只能有2100万个,所以sats总量也被限制为 2.1 * 10^7 * 10^9 个。第一个区块中的第一个sat的序号为0,第二个sat的序号为1,第一个区块的最后一个sat的序号为 4,999,999,999,能被挖出来的最后一个sat的序号为20,999,999,999,999,999。下图是一个编号为1440861821052292的sat

因为正常的sat序号过长了,所以又设计了不同的表示方法来表示这个序号

  • 整数表示法:2099993888271341,这个表示sat被“挖”出来的顺序分配

  • 十进制表示法:3879627.5570,整数部分表示的是区块高度,小数部分表示的是该sat在区块内的偏移量

  • 度数表示法:3°99627'843''5570''',稍后解释

  • 百分比表示法:99.99970907530168%,该sat在比特币供应量中的位置,以百分比表示

  • 名字表示法:stefans,通过a-z这26个字母对整数表示法进行编码,这个编码规则是倒叙的,第1个sat的名字是nvtdijuwxlp,最后一个sat的名字是a,所以越后面的sat,名字会越短。

未花费的输出 (UTXO)

UTXO:也叫未花费的输出,因为BTC网络不像以太坊,没有账户概念,地址的余额是根据历史的交易记录累计出来的,这里每一个历史交易记录都可以算作是一个UTXO。举个例子,A有5个BTC,要转账给B 4个BTC,那钱包会先找到这5个BTC的UTXO作为输入,然后输出是转给B的4个BTC,另外给自己找零1个BTC(如果这里给自己的找零为0.8BTC,则剩下的0.2BTC会默认给矿工作为矿工费),这4个BTC相对于B来说就是他的UTXO,如果B未来转账,就会先找到这个UTXO作为输入再转出去

铭文 (Inscriptions)

铭文刻有任意内容,创造了比特币原生的数字人工制品,通常被称为 NFT,铭文不需要侧链或单独的Token。铭刻是通过将要铭刻的sat发送到交易中来完成的,该交易会在链上显示铭文内容。然后,此内容与那个sat有着千丝万缕的联系,将其变成一个不可改变的数字艺术品,可以被追踪、转移、储存、购买、出售、丢弃和重新发现。这里的铭文就可以被称为BTC上的NFT了。

已经被铭刻的sat无法被修改,但是没有被铭刻的sat是可以在后续被铭刻的。所以理论上能在BTC网络上的铭文数量等于sats的数量。

任何人都可以铭刻任意的内容,可以是图片、音频、视频以及任何格式的内容等。这些内容是完全被记录在链上并且无法更改的。这些内容是通过脚本原生“附”在每个sat上的,然后可以使用比特币交易传输这些铭刻的sats,发送到指定的比特币地址,并保存在比特币的UTXO中。这些交易、地址和 UTXO 在所有方面都是正常的比特币交易、地址和 UTXO,除了为了发送单个 sat,交易必须根据序数理论控制输入和输出的顺序和值。

下面是一个简单的一段想要铭刻文字的脚本示例,当按照规范发送一笔交易并写入脚本后,这就成为了一个铭文:

OP_FALSE
OP_IF
  OP_PUSH "ord"
  OP_1
  OP_PUSH "text/plain;charset=utf-8"
  OP_0
  OP_PUSH "Hello world!"
OP_ENDIF

稀有度 (Rarity)

因为每一个sat都被标记了序号,从0~20,999,999,999,999,999,加上比特币本身也会有一些周期性的事件,这些事件有些很常见,有些不太常见,所以我们可以人为给每个sat定义稀有度,这个sat的稀有度与铭文的稀有度无关,但是当一些铭文本来就是稀有的,且“附”到的sat也是稀有的,那可能会更大程度上赋予该铭文的价值。这些周期性事件是:

  • 区块 (Blocks):比特币链大约每10分钟产生一个新的区块

  • 难度调整 (Difficulty adjustments):每2,016个区块(大约每2周),比特币网络都会根据当前全网算力调整挖矿难度

  • 减半 (Halvings):每210,000个区块(大约每4年),每个区块中被创造出来的比特币数量就会减半

  • 循环 (Cycles):每6次减半,就会发生一个奇特的事情:减半和难度调整会同时发生,这个阶段被称为循环,大约每24年发生一次,目前我们还未经历第一个循环的结束,它大概在2032年发生

根据上面的一些周期性事件,我们给sat定义了以下稀有度级别:

  • 普通 (common):任何不是其区块的第一个sat的sat

  • 不普通 (uncommon):每个区块的第一个sat

  • 稀有 (rare):每个难度调整期的第一个sat

  • 史诗 (epic):每个减半周期的第一个sat

  • 传奇 (legendary):每个循环的第一个sat

  • 神话 (mythic):创世区块的第一个sat

因为有4个周期性事件,所以我们可以用度数法来一目了然地表示一个sat的序号,这样它的稀有度也能一目了然:

A°B′C″D‴
│ │ │ ╰─ sat在当前区块的位置(也可称为偏移量)
│ │ ╰─── sat所在区块处于难度调整期的第几个区块
│ ╰───── sat所在区块处于减半周期的第几个区块
╰─────── sat区块处于循环的第几个,从0开始

下面我们举一些例子:

这是一个普通的sat(这个sat刚好是一个铭文)

这是一个不普通的sat

这是一个稀有的sat

这是一个史诗的sat

这是一个传奇的sat

这是一个神话的sat

按照稀有度的定义,我们可以知道当前所有sats中

不同稀有度的总数量:

  • 普通 (common):2.1 * 10^7 * 10^9

  • 不普通 (uncommon):6,929,999

  • 稀有 (rare):3,437

  • 史诗 (epic):32

  • 传奇 (legendary):5

  • 神话 (mythic):1

当前已经“挖”出来的sats的稀有度总数量:

  • 普通 (common):1.9 * 10^7 * 10^9

  • 不普通 (uncommon):745,855

  • 稀有 (rare):369

  • 史诗 (epic):3

  • 传奇 (legendary):0

  • 神话 (mythic):1

铭刻和转移铭文

上面内容就是Ordinal中涉及到的基本概念和原理,想要了解铭文和NFT的区别,还需要了解比特币链和以太坊的区别,他们在底层逻辑上有2个非常大的不同:

  1. 比特币链没有账户概念而以太坊有,所以在比特币链上你地址上的BTC余额其实是累加你所有的UTXO而得到的。

  2. 以太坊是图灵完备的智能合约,而比特币链上只有非图灵完备的脚本,在比特币链上可以完成的功能是非常有限的。

因为上面的区别,所以导致了:

  1. 目前在比特币链上不能像以太坊上那样,通过部署一个智能合约,通过与合约交互获得NFT,而是通过执行一笔交易把铭文的内容通过脚本“附”到sat上,并且这个sat被保存在一个UTXO中。

  2. 因为sat是BTC的最小单位,UTXO会包含这些sat(不可能存在有任何一个sat不属于一个UTXO),所以如果你拥有的铭文所在的UTXO被转走了,那你的铭文自然而然会被转移到其他地址

  3. 很难通过去中心化的方式让它有合集(Collections)的概念,因为铭文是相对独立的,彼此之间并不知道互相的存在,如果想要建立合集,需要NFT发行方中心化地去定义

铭刻自己的铭文

了解了上面的原理,那铭刻铭文也相对简单了,其实就是通过发起一笔交易,通过支持Ordinal协议的钱包(目前是Ordinals官方钱包)把你想要的文件通过脚本附加到一个sat上完成的。这笔交易的收款地址可以是你的付款地址,也可以是一个你指定的地址来接收这个UTXO,当你的收款地址收到这个UTXO的时候,那这个UTXO中的第一个sat将会是一个铭文。除非你非常清楚自己要做什么,否则你接收铭文的地址请不要做任何交易。下一篇文章我们会实际操作一下,教你如何在比特币链上铸造、发送和保管铭文。

铭刻其他项目的铭文

以太坊是通过与NFT项目方的智能合约交互获得NFT的,但比特币链不同于以太坊,目前无法通过与项目方发行的智能合约交互,通常是项目方在网站上公开他们的NFT文件(一般是图片),需要用户自己去下载对应要铭刻的NFT文件,然后根据上面的铭刻流程把内容上传到比特币链上,这样你就能得到这个项目的NFT(铭文)了。通过这个流程,很容易想到有个很关键的问题:如何防伪?

如果我上传的文件是被我修改过的,这可能是很细微的图片修改让肉眼无法识别,这样的文件是如何去防伪的?通常来说,项目方会在发布文件之前,把所有要发布的文件通过hash运算一次,得到一个hash值,然后再找到你上传的文件,做相同的hash操作,如果这个文件没有被修改,那他们的hash值是一样的;否则得到的hash值是不一样的,那这样项目方是不会承认这样的文件的,即你的NFT是假的。

因为没有智能合约的约束,文件也是自取的,所以任何人都可以在任何时间用相同的文件去制作铭文,那如何才能去确定哪一个铭文才是“正版”的呢?这时候项目方通常也会扫描所有被铭刻出来的铭文,先通过对比hash确认是自己项目的NFT,如果遇到同一张图片,会以最先被铭刻出来的为准。

其实能看得出来,这样的模式会带来一些防伪、确权和安全性问题。假如黑客事后也用相同文件铭刻了铭文,然后黑了项目方的网站,把对应铭文的编号指向黑客后铭刻的铭文,对于普通用户来说非常难去辨别真伪,也提高了门槛。

转移铭文

如果要转移你的铭文,只需要将该编号的sat对应的UTXO转到要接收该铭文的比特币地址即可。注意:因为这里要选择对应的UTXO,所以需要使用支持该功能的比特币钱包才行,否则用目前市面上的普通比特币钱包,造成的结果可能是无法预计的。对于不熟悉BTC原理的用户来说,通常建议的是如果一个地址接受到铭文了,就放在那里,不要做任何转账操作,以免铭文丢失,并且一个地址只接收一个铭文。

关注AK Labs Twitter

Subscribe to AKLabs
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.