# 如何估算Ordinals铸造费用

By [quentangle](https://paragraph.com/@quentangle) · 2023-05-11

---

作者：团长（[https://twitter.com/quentangle\_](https://twitter.com/quentangle_)）

比特币交易中每一个字节都是需要花钱买的，今天给大家介绍一下如何估算铸造Ordinals铭文的费用，让大家知道自己的钱都花在了哪里，也可以协助我们对一些铭文代打的bot的费用高低有个感性认识。不想了解技术细节的小伙伴可以直接跳到结论部分。

由于taproot脚本的花费只能从现有的taproot输出中进行，所以Inscription是用一个两阶段的提交Commit/揭示Reveal过程来进行的。首先，在提交交易中，创建了一个提交给包含Inscription内容的脚本的taproot输出。其次，在揭示交易中，由提交交易创建的输出被花费，揭示链上的铭文内容。也就是说一次Ordinals铸造过程是由两笔普通的比特币P2TR交易构成，如图所示：

![](https://storage.googleapis.com/papyrus_images/58bea83613ca9dcfbed92885aa54a1a2eb1f2726ab21ffec553351d8dcbf5325.png)

其中第一笔称为CommitTx，这是一个不包含铭文数据的普通交易，普通的比特币交易的大小主要是由输入和输出的数量决定的，数量越多，需要存储的地址和验证信息也就越多，交易的大小就越大。比如这个包含275个输入的交易大小是47kB：

![](https://storage.googleapis.com/papyrus_images/7911fd04678164575e4427a9c612dea0394abdd36bc732bbe5acae8accce2055.png)

而下面这个包含4个输入4个输出的交易是821B：

![](https://storage.googleapis.com/papyrus_images/d3a0b5f468eeab376687acc3ec258f7bc1adc87808c7e0267006fdba5d03d77b.png)

我们以两个输入和两个输出举例，了解一下交易的字节构成，这个交易大小大概是212vBytes：

![](https://storage.googleapis.com/papyrus_images/46ea0b2dbcaff0d217f16fe4c344ad5e8700dc17aa5e7728fb02ba37fb308886.webp)

第二笔交易是RevealTx，这个交易除了包含一个普通的P2TR的交易之外，还包含Inscription数据，在表格中用`insdata`标识但是这个交易一般只有一个输入和一个输出，大概是111vBytes。

![](https://storage.googleapis.com/papyrus_images/8dc5350a9ab82e7eff53c8de7862a2b825f5a71263cd57c22161f25d7206e07f.webp)

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中包含的输入输出数量很多，那么费用会有所提高。
    
*   一般的代打服务都会收取一定的费用，上面的技术没有包含这部分的服务费。
    
*   上面的计算过程仅用于费用估算，请勿用于生产环境中。
    
*   如果你有把铸造费用降得更低的办法，欢迎讨论。
    

* * *

原链接：

[https://buidler.space/Ordinals-0a26ef31ca8a42e8b0df419f15d44327](https://buidler.space/Ordinals-0a26ef31ca8a42e8b0df419f15d44327)

---

*Originally published on [quentangle](https://paragraph.com/@quentangle/ordinals)*
