Taxas de transação
Toda transação na Solana requer uma taxa base (SOL) para compensar os validators pelo processamento da transação. Você também pode pagar uma taxa de priorização opcional para aumentar a chance de que o líder atual (validator) processe sua transação.
Pontos principais
- A taxa base para uma transação é de 5000 lamports por assinatura na transação.
- A taxa de priorização (opcional) é uma taxa extra que você paga ao validator para aumentar a chance de que o líder atual processe sua transação.
- A taxa de priorização é igual a: (limite de unidades de computação * preço da unidade de computação).
- O limite de unidades de computação é o máximo de unidades de computação que sua transação pode usar.
- O preço da unidade de computação é o preço por unidade de computação, em micro-lamports.
- 1.000.000 de micro lamports = 1 lamport
- O pagador da taxa de transação deve ser uma conta pertencente ao System Program.
Taxa base de transação
A taxa base é o custo para enviar uma transação. O custo é de 5000 lamports por assinatura incluída na transação.
A taxa base sai da conta do pagador da taxa de transação, que é o primeiro signatário da transação. O pagador da taxa deve ser uma conta pertencente ao System Program.
- 50% Queimados: Metade da taxa base é queimada.
- 50% Distribuição: Metade é paga ao validator que processou a transação.
Taxa de priorização
A taxa de priorização é uma taxa opcional paga para aumentar a chance de que o líder atual processe sua transação.
- SIMD-0096: O validator que processa a transação recebe 100% da taxa de prioridade.
Unidades de computação e limites
Quando uma transação é processada, ela usa recursos computacionais medidos em unidades de computação (CU). Cada instrução deduz do orçamento de unidades de computação da transação.
- Limite máximo: Uma transação pode usar até 1,4 milhões de unidades de computação.
- Limite padrão: Por padrão, cada instrução pode usar até 200.000 unidades de computação.
- Limite personalizado: Você pode solicitar um limite específico de unidades de
computação incluindo uma instrução
SetComputeUnitLimit
em sua transação.
Para mais detalhes sobre o uso de unidades de computação:
Consulte o guia Como solicitar computação ideal para mais detalhes sobre o uso de unidades de computação.
Preço da unidade de computação
O preço da unidade de computação é um valor opcional, especificado em micro-lamports, que você paga por cada unidade de computação solicitada. Este preço é usado para calcular a taxa de priorização para sua transação.
Use estes recursos para obter recomendações em tempo real sobre o preço atual da unidade de computação:
Provedor | API de taxa de prioridade |
---|---|
Helius | Documentação |
QuickNode | Documentação |
Triton | Documentação |
Consulte o guia Como usar taxas de prioridade para mais detalhes sobre taxas de prioridade.
Calcular taxa de priorização
A taxa de priorização é calculada como:
Taxa de priorização = Limite de unidades de computação × Preço da unidade de computação
A abordagem recomendada para definir taxas de prioridade é primeiro
simular a
transação para estimar as unidades de computação necessárias. Em seguida,
adicione uma margem de segurança de 10% a esta estimativa e use o valor
resultante como o Compute Unit Limit
.
A prioridade da transação, que determina como ela é priorizada em relação a outras transações, é calculada usando a seguinte fórmula:
Prioridade = ((Limite de Unidade de Computação * Preço da Unidade de Computação) + Taxa Base) / (1 + Limite de Unidade de Computação + CUs de Assinatura + CUs de Bloqueio de Escrita)
Use estas instruções para definir o limite e o preço da unidade de computação em uma transação:
SetComputeUnitLimit
para definir um limite específico de unidades.SetComputeUnitPrice
para definir o preço por unidade de computação.
Se você não fornecer essas instruções, a transação usará o limite padrão de unidade de computação com um preço de unidade de computação de 0 (sem taxa de priorização).
A taxa de prioridade depende do limite de unidade de computação que você solicita para a transação, não das unidades de computação realmente utilizadas. Se você definir um limite de unidade de computação muito alto ou usar a quantidade padrão, poderá pagar por unidades de computação não utilizadas.
Exemplos
Os exemplos a seguir mostram como definir o limite e o preço da unidade de computação para uma transação.
SDK | Referência do Código Fonte |
---|---|
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 instructionsconst 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 transactionconst transaction = new Transaction().add(limitInstruction).add(priceInstruction).add(transferInstruction);const signature = await sendAndConfirmTransaction(connection, transaction, [sender]);console.log("Transaction Signature:", signature);
Is this page helpful?