作者:团长(https://twitter.com/quentangle_)
比特币交易中每一个字节都是需要花钱买的,今天给大家介绍一下如何估算铸造Ordinals铭文的费用,让大家知道自己的钱都花在了哪里,也可以协助我们对一些铭文代打的bot的费用高低有个感性认识。不想了解技术细节的小伙伴可以直接跳到结论部分。
由于taproot脚本的花费只能从现有的taproot输出中进行,所以Inscription是用一个两阶段的提交Commit/揭示Reveal过程来进行的。首先,在提交交易中,创建了一个提交给包含Inscription内容的脚本的taproot输出。其次,在揭示交易中,由提交交易创建的输出被花费,揭示链上的铭文内容。也就是说一次Ordinals铸造过程是由两笔普通的比特币P2TR交易构成,如图所示:
其中第一笔称为CommitTx,这是一个不包含铭文数据的普通交易,普通的比特币交易的大小主要是由输入和输出的数量决定的,数量越多,需要存储的地址和验证信息也就越多,交易的大小就越大。比如这个包含275个输入的交易大小是47kB:
而下面这个包含4个输入4个输出的交易是821B:
我们以两个输入和两个输出举例,了解一下交易的字节构成,这个交易大小大概是212vBytes:
Part | Field | Size(byte) | vByte | section count |
---|---|---|---|---|
Overhead | Version | 4 | 4 | |
Input count | 1 | 1 | ||
Output count | 1 | 1 | ||
Locktime | 4 | 4 | ||
flag | 1 | 1 | 11 | |
Input1 | OutPoint | 36 | 36 | |
sequence | 4 | 4 | ||
witness count | 1 | 0.25 | ||
witness | 65 | 16.25 | 56.5 | |
Input2 | OutPoint | 36 | 36 | |
sequence | 4 | 4 | ||
witness count | 1 | 0.25 | ||
witness | 65 | 16.25 | 56.5 | |
Output1 | value | 8 | 8 | |
pkscript length | 1 | 1 | ||
pkscript | 34 | 34 | 43 | |
Output2 | value | 8 | 8 | |
pkscript length | 1 | 1 | ||
pkscript | 34 | 34 | 43 |
第二笔交易是RevealTx,这个交易除了包含一个普通的P2TR的交易之外,还包含Inscription数据,在表格中用insdata
标识但是这个交易一般只有一个输入和一个输出,大概是111vBytes。
Part | Field | Size(byte) | vByte |
---|---|---|---|
Overhead | Version | 4 | 4 |
Input count | 1 | 1 | |
Output count | 1 | 1 | |
Locktime | 4 | 4 | |
flag | 1 | 1 | |
Input1 | OutPoint | 36 | 36 |
sequence | 4 | 4 | |
witness count | 1 | 0.25 | |
witness | 65+insdata | (65+insdata)/4 | |
Output1 | value | 8 | 8 |
pkscript length | 1 | 1 | |
pkscript | 34 | 34 |
Inscription数据是放在witness字段中的,这部分的数据在计算时是会打折扣,需要除以4。
举个例子,如果要铸造一个40kB的Inscription,总的交易大小是
212+111+(40*1024/4)=10,563vBytes
如果是铸造brc20这样的纯字符,铭文内容大概60Byte,则总的交易大小是
212+111+(60/4)=338vBytes
。
将这个数字乘以当时的费率,就是铸造铭文所需要的网络交易费。