深入理解铭文(一)
January 28th, 2024

声明

这篇文章是基于我自己的理解整理的铭文调研。我对于比特币的了解还处在一个非常初级的阶段,对于区块链的认知更多在比特币生态上。如果你和我一样,几乎不了解比特币的技术原理和细节,那么就很适合阅读。

正文

在上一篇文章中简单地介绍了铭文:

但是这篇文章忽略了很多技术细节。这篇文章我将从一个实际的mint开始,深入理解铭文的实现细节。

首先我在unisat上发起mint(钱包地址:bc1ptkmzttnea75myw02gf298fua7srj3huj4xrnj2j93tmfzx6vl0fsywj9rg ):

在mempool上看到这笔交易:

可以看到7000 sats直接转给了bc1p7xphny3q96w50d4sfqvj6gzffxp0kpsdrky79zsn622rgxzrzcjqr96w0v 这个地址,这个地址。 先看第一笔交易的信息:

再来看7000sats转给了bc1p7xphny3q96w50d4sfqvj6gzffxp0kpsdrky79zsn622rgxzrzcjqr96w0v 这个地址之后发生了什么:

注意看这个地址的两笔交易中间隔了40多分钟,这是因为在第一笔交易收到转账再把这7000sats用于铭刻和支付服务费时,网络堵塞程度发生了变化,同样的gas fee确认时间变慢了。 可以这么理解:bc1p7xphny3q96w50d4sfqvj6gzffxp0kpsdrky79zsn622rgxzrzcjqr96w0v 这个地址实现了一个类似智能合约的东西(当然只是一个比喻,比特币没有智能合约),在收到7000sats之后,自动实现了:1.把546 sats(交易的最低额度)转给了mint的接收钱包,1904 sats支付给项目方作为服务费(这个类智能合约的地址是什么,我们后面再讲)。 f976dc6b6ad50583cc0d25b948d8ab48df3ca37a61de0208f3bceadf0c23e3a2 这笔交易也就是所谓的铭刻。我们可以看到这笔交易的输入数据明显比普通的交易数据多:

结合这篇文章来看,我们可以知道这个输入数据包含了铭文的信息。因此对于客户端来说,就可以通过识别这个钱包地址下的UTXO来识别这个地址拥有了哪些铭文。

用一张图可以很形象地描述这个过程:

我们再回到刚刚忽略的最重要的一个环节:bc1p7xphny3q96w50d4sfqvj6gzffxp0kpsdrky79zsn622rgxzrzcjqr96w0v 这个地址是什么?

给Ordinal绑定相应的内容,如图片、文字等的过程叫做Inscriptions。它主要基于2022年BTC Taproot升级之后引入的特性,可以在taproot脚本中存储任意数据(不超过4M),并且同样可以利用隔离见证的1/4手续费打折,非常便宜且NFT完全上链。 由于taproot脚本具有很好的隐蔽性,只有在花费该解锁脚本时才能揭示脚本的内容,因此mint过程分为两步:

  • commit: 创建一个taproot输出(该输出会提交到一个包含mint内容的解锁脚本,此时script本身还未上链,只是生成了一条taproot script路径), 并提交该交易;

  • reveal: 花费上述交易生成的UTXO,由于此时必须将包含mint内容的脚本作为输入来解锁上述UTXO,因此就在链上揭示了mint的内容。

关于commit和reveal的具体过程,可以参考这篇文章:

ARC-20

用wizz钱包来mint一个ARC-20代币就能很直观地理解了,在mint的时候,钱包贴心地标出了commit和reveal的费用。

并且,它在请求你签名的时候就已经把输入、输出都确定好了。你需要对这两个交易都进行签名。

第二笔交易:

进入mempool查看:

看到这里,你可能会有疑问。对于第一笔交易没有问题,因为是从我的钱包(地址)把钱转出去的,那么为什么我可以对第二笔交易进行操作?我并不拥有这个地址,我是又是如何做到“控制”这个地址,让它实现转账的?

这就涉及到了比特币的交易本质。对于中心化世界的开发者来说,可能会有一个惯性思维:一笔交易肯定是要提交到某个中心节点,经节点处理之后才形成全网唯一的id。但在加密世界中,交易id是交易内容的一个hash,它在交易内容确定的那一刻就被确定了,不需要经过节点的计算。

UTXO的本质就是一段包含了公钥的一段数据,谁拥有 UTXO 中公钥对应的私钥,谁就可以使用(即花费)这个 UTXO。 因此在比特币中,狭义上不存在“账户”这个概念。转账不是“我向某个地址转入了n个比特币”,而是我向全世界的人声明了,我这里有一笔交易,这笔交易里声明了比特币数量以及一个公钥,谁有这个公钥对应的私钥就能把这笔钱花掉。而所谓的“账户”实际上是这个公钥所关联的交易。

关于交易的全部细节,请查看这篇文章:

延伸阅读

震惊!交易id居然不是唯一的? https://blog.csdn.net/u014633283/article/details/104759834

比特币交易 https://segmentfault.com/a/1190000016757805

课后提问

另外一个问题是,为什么我不直接在一笔交易中就包含铭文的脚本,而是要分成commit和reveal两笔交易?

Subscribe to 大白话web3
Receive the latest updates directly to your inbox.
Nft graphic
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.
More from 大白话web3

Skeleton

Skeleton

Skeleton