铭文是用任意的内容来铭刻Satoshi,创建比特币原生的数字艺术品,通常被称为NFTs。铭文不需要侧链或单独的代币。

这些铭刻的sat可以使用比特币交易转移,发送到比特币地址,并在比特币UTXO中持有。这些交易、地址和UTXO在所有方面都是正常的比特币交易、地址和UTXOs,除了为了发送单个sat,交易必须根据序数理论控制输入和输出的顺序和价值。

铭文的内容模型是网络的模型。一个铭文由一个内容类型(也称为MIME类型)和内容本身组成,后者是一个字节字符串。这允许铭文内容从网络服务器返回,并用于创建使用和重新混合其他铭文内容的HTML铭文。

铭文内容完全在链上,存储在taproot脚本路径的花费脚本中。Taproot脚本对其内容的限制非常少,另外还可以获得见证witness折扣,使铭文内容的存储相对经济。

由于taproot脚本的花费只能从现有的taproot输出中进行,所以铭文是通过一个两阶段的提交/揭示程序来进行的。首先,在提交事务中,创建一个提交给包含铭文内容的脚本的taproot输出。其次,在揭示交易中,由提交交易创建的输出被花费,揭示链上的铭文内容。

铭文内容在未执行的条件中使用数据推送进行序列化,称为 "封装"。包络由一个OP_FALSE OP_IF ... OP_ENDIF组成,包裹着任意数量的数据推送。因为封套实际上是无操作的,所以它们不会改变包含它们的脚本的语义,并且可以与任何其他锁定脚本相结合。

一个包含字符串 "Hello, world!"的文本铭文被序列化如下:

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

首先推入字符串ord,以区分铭文和封装的其他用途。

OP_1表示下一次推入数据包含内容类型,OP_0表示后续数据推入包含内容本身。对于大的铭文必须使用多个数据推入,因为taproot的少数限制之一是单个数据推入不得大于520字节。

铭文内容包含在一个揭示事务的输入中,铭文是在其第一个输出的第一个sat上进行的。然后可以使用熟悉的序数理论规则来追踪这个sat,允许它被转移、购买、出售、丢失到费用,并被恢复。