工具箱
优先费与计算管理
Last updated September 21, 2026
总结
使用 setTransactionConfig() 配置 V1 交易的计算单元和优先费。
- V1 使用
computeUnitLimit和优先费总额priorityFee。 - Umi V1 交易构建器会拒绝 Compute Budget 程序指令。
- V0 使用
setComputeUnitLimit和setComputeUnitPrice。 - 对于以每个计算单元的 micro-lamport 数量表示的优先费估算值,必须先转换为总 lamport 数,才能用于 V1。
Umi V1 交易将计算上限和优先费总额存储在交易消息中,而 V0 交易使用 Compute Budget 程序指令。
配置 V1 计算单元和优先费
V1 交易使用 setTransactionConfig() 配置计算单元上限和优先费总额。
V1 compute configuration
import { lamports, transactionBuilder } from '@metaplex-foundation/umi'
await transactionBuilder()
.add(myInstruction)
.useV1()
.setTransactionConfig({
computeUnitLimit: 600_000,
priorityFee: lamports(600),
})
.sendAndConfirm(umi)
priorityFee 是费用总额,而不是每个计算单元的价格。当单价为 1,000 micro-lamport、上限为 600,000 个计算单元时,总额为 600,000 × 1,000 ÷ 1,000,000 = 600 lamport。
请勿向 V1 交易构建器添加 setComputeUnitLimit 或 setComputeUnitPrice 指令。Umi 会拒绝 V1 交易中的 Compute Budget 指令。
配置 V0 计算单元和优先费
V0 交易继续使用 @metaplex-foundation/mpl-toolbox 中的 Compute Budget 程序指令。
V0 compute configuration
import { transactionBuilder } from '@metaplex-foundation/umi'
import {
setComputeUnitLimit,
setComputeUnitPrice,
} from '@metaplex-foundation/mpl-toolbox'
await transactionBuilder()
.add(setComputeUnitLimit(umi, { units: 600_000 }))
.add(setComputeUnitPrice(umi, { microLamports: 1_000 }))
.add(myInstruction)
.useV0()
.sendAndConfirm(umi)
当交易需要 Address Lookup Table,或连接的钱包不支持 V1 交易时,请使用 V0。
注意事项
- 使用
useV1()和setTransactionConfig()需要 Umi 1.6.0 或更高版本。 - V1 计算单元上限不能超过 1,400,000。
- 请参阅优化交易落地,了解如何估算计算单元和费用。
- 请参阅从 V0 迁移到 V1 交易,了解所有兼容性要求。
