作者:团长(https://twitter.com/quentangle_)
比特币交易中每一个字节都是需要花钱买的,今天给大家介绍一下如何估算铸造Ordinals铭文的费用,让大家知道自己的钱都花在了哪里,也可以协助我们对一些铭文代打的bot的费用高低有个感性认识。不想了解技术细节的小伙伴可以直接跳到结论部分。
由于taproot脚本的花费只能从现有的taproot输出中进行,所以Inscription是用一个两阶段的提交Commit/揭示Reveal过程来进行的。首先,在提交交易中,创建了一个提交给包含Inscription内容的脚本的taproot输出。其次,在揭示交易中,由提交交易创建的输出被花费,揭示链上的铭文内容。也就是说一次Ordinals铸造过程是由两笔普通的比特币P2TR交易构成,如图所示:
其中第一笔称为CommitTx,这是一个不包含铭文数据的普通交易,普通的比特币交易的大小主要是由输入和输出的数量决定的,数量越多,需要存储的地址和验证信息也就越多,交易的大小就越大。比如这个包含275个输入的交易大小是47kB:
而下面这个包含4个输入4个输出的交易是821B:
我们以两个输入和两个输出举例,了解一下交易的字节构成,这个交易大小大概是212vBytes:
第二笔交易是RevealTx,这个交易除了包含一个普通的P2TR的交易之外,还包含Inscription数据,在表格中用insdata
标识但是这个交易一般只有一个输入和一个输出,大概是111vBytes。
Inscription数据是放在witness字段中的,这部分的数据在计算时是会打折扣,需要除以4。
举个例子,如果要铸造一个40kB的Inscription,总的交易大小是
212+111+(40*1024/4)=10,563vBytes
如果是铸造brc20这样的纯字符,铭文内容大概60Byte,则总的交易大小是
212+111+(60/4)=338vBytes
。
将这个数字乘以当时的费率,就是铸造铭文所需要的网络交易费。
除了网络费用,铭文需要依附于一个具体的比特币转账而存在,所以比特币转账的金额也需要算在内,当然这部分的费用最终还是在用户自己钱包里,可以当成普通的比特币花出去(不要这么做)。Ordinals官方的转账金额是10000sats,有的代打bot会提供把这个数字调小的功能,但是这个数字必须要大于比特币网络的dust limit,即一个最小的转账金额,否则节点不会转发该笔交易。这个数字目前是546 sats。
经过上面的详细拆解,我们可以得出一个估算铸造成本的公式。我们以分别包含一个输入、一个输出的commit tx和reveal tx来计算,铸造一个Ordinals铭文需要的费用:
设你的铭文文件大小是X,那么交易的大小就是X/4 + 222,将这个结果乘以当时的网络费用,就是整个铸造的交易成本。
以铸造一个60Byte的Brc20字符串举例,假设当前的网络费率是100 sats/vBytes,总的成本是:
(222+60/4)*100 + 546 = 24,246 sats
说明:
以上是按照包含Commit和Reveal两阶段的铸造过程计算的,如果commit tx已经提前生成好,只需要reveal的话,费用会略低一点。(ord官方钱包并未提供这种方式)
如果Commit tx或Reveal tx中包含的输入输出数量很多,那么费用会有所提高。
一般的代打服务都会收取一定的费用,上面的技术没有包含这部分的服务费。
上面的计算过程仅用于费用估算,请勿用于生产环境中。
如果你有把铸造费用降得更低的办法,欢迎讨论。
原链接: