添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

交易费用

每笔 Solana 交易都需要支付基础费用(SOL),以补偿验证者处理交易的成本。您还可以支付可选的优先费用,以增加当前领导者(验证者)处理您交易的机会。

  • 交易的 基础费用 为每个签名 5000 lamports。
  • 优先费用 (可选)是您支付给验证者的额外费用,用于增加当前领导者处理您交易的机会。
  • 优先费用计算公式为: (计算单元限制 * 计算单元价格)
  • 计算单元限制 是您的交易可以使用的最大计算单元数。
  • 计算单元价格 是每个计算单元的价格,以微 lamports 为单位。
  • 1,000,000 微 lamports = 1 lamport
  • 交易费用支付者必须是由 System Program 拥有的账户。
  • 基础交易费用

    基础费用是发送交易的成本。每个交易签名的费用为 5000 lamports。

    基础费用从交易费用支付者的账户中扣除,该账户是交易中的第一个签名者。费用支付者必须是由 System Program 拥有的账户。

  • 50% 销毁 :基础费用的一半会被销毁。
  • 50% 分配 :另一半支付给处理交易的验证者。
  • 优先费用是一种可选费用,用于增加当前领导者处理您交易的机会。

  • SIMD-0096 :处理交易的 validator 将获得 100% 的优先费用。
  • 计算单元和限制

    当处理交易时,会使用以计算单元(CU)为单位的计算资源。每条指令都会从交易的计算单元预算中扣除。

  • 最大限制:一笔交易最多可以使用 140 万计算单元
  • 默认限制:默认情况下,每条指令最多可以使用 20 万计算单元
  • 自定义限制:您可以通过在交易中包含 SetComputeUnitLimit 指令来请求特定的计算单元限制。
  • 有关计算单元使用的更多详细信息:

  • ComputeBudget
  • 计算单元消耗默认值
  • 如何请求最佳计算 指南,了解有关计算单元使用的更多详细信息。

    计算单元价格

    计算单元价格是一个可选金额,以微 lamport 为单位,您为每个请求的计算单元支付的费用。此价格用于计算交易的优先费用。

    1,000,000 微 lamport = 1 lamport

    使用以下资源获取当前计算单元价格的实时建议:

    请参阅 如何使用优先费用 指南,了解有关优先费用的更多详细信息。

    计算优先费用

    的计算公式为:

    优先费用 = 计算单元限制 × 计算单元价格

    设置优先费用的推荐方法是首先 交易以估算所需的计算单元。然后,在此估算值上增加 10% 的安全余量,并将结果值用作 Compute Unit Limit

    交易优先级 ,决定了它相对于其他交易的优先顺序,使用以下公式计算:

    优先级 = ((计算单元限制 * 计算单元价格) + 基础费用) / (1 + 计算单元限制 + 签名计算单元 + 写锁计算单元)

    请按照以下说明为交易设置计算单元限制和价格:

  • SetComputeUnitLimit 用于设置特定的单元限制。
  • SetComputeUnitPrice 用于定义每个计算单元的价格。
  • 如果您未提供这些说明,交易将使用默认的计算单元限制,计算单元价格为 0(无优先级费用)。

    优先级费用取决于您为交易请求的计算单元限制,而不是实际使用的计算单元。如果您设置的计算单元限制过高或使用默认值,可能会为未使用的计算单元支付费用。

    以下示例展示了如何为交易设置计算单元限制和价格。

    SDK 源代码参考
    solana-sdk (Rust) ComputeBudgetInstruction
    @solana/web3.js (Typescript) ComputeBudgetProgram
    const limitInstruction = ComputeBudgetProgram.setComputeUnitLimit({
    units: 300_000
    const priceInstruction = ComputeBudgetProgram.setComputeUnitPrice({
    microLamports: 1
    import {
    LAMPORTS_PER_SOL,
    SystemProgram,
    Transaction,
    Keypair,
    Connection,
    ComputeBudgetProgram,
    sendAndConfirmTransaction
    } from "@solana/web3.js";
    const connection = new Connection("http://localhost:8899", "confirmed");
    const sender = Keypair.generate();
    const recipient = new Keypair();
    const airdropSignature = await connection.requestAirdrop(
    sender.publicKey,
    LAMPORTS_PER_SOL
    await connection.confirmTransaction(airdropSignature, "confirmed");
    // Create compute budget instructions
    const limitInstruction = ComputeBudgetProgram.setComputeUnitLimit({
    units: 300_000
    const priceInstruction = ComputeBudgetProgram.setComputeUnitPrice({
    microLamports: 1
    const transferInstruction = SystemProgram.transfer({
    fromPubkey: sender.publicKey,
    toPubkey: recipient.publicKey,
    lamports: 0.01 * LAMPORTS_PER_SOL
    // Add the compute budget and transfer instructions to a new transaction
    const transaction = new Transaction()
    .add(limitInstruction)
    .add(priceInstruction)
    .add(transferInstruction);