Taxas de transação
Toda transação na Solana requer uma taxa de transação, paga em SOL. As taxas de transação são divididas em duas partes: a taxa base e a taxa de priorização. A taxa base compensa os validadores pelo processamento da transação. A taxa de priorização é uma taxa opcional, para aumentar a chance de que o líder atual processe sua transação.
Taxa base
Cada transação custa 5000 lamports por assinatura incluída. Esta taxa é paga pelo primeiro signatário da transação. Apenas contas pertencentes ao System Program podem pagar taxas de transação. A taxa base é dividida da seguinte forma:
- 50% queimados: Metade é queimada (retirada da oferta circulante de SOL).
- 50% distribuídos: Metade é paga ao validador que processou a transação.
Taxa de priorização
Uma taxa de priorização é uma taxa opcional usada para aumentar a chance de que o líder atual (validador) processe sua transação. O validador recebe 100% da taxa de prioridade. As taxas de priorização podem ser definidas ajustando o preço da unidade de computação (computation unit) (CU) e o limite de CU da transação. (Veja o Guia de como usar taxas de prioridade para mais detalhes sobre taxas de priorização.)
A taxa de priorização é calculada da seguinte forma:
Prioritization fee formula
Prioritization fee = CU limit * CU price
A taxa de priorização é usada para determinar a prioridade da sua transação, em relação a outras transações. É calculada usando a seguinte fórmula:
Transaction priority formula
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)
Limite de unidade de computação
Por
padrão,
cada instrução recebe
200.000 CUs
e cada transação recebe
1,4 milhão de CUs.
Você pode alterar esses padrões incluindo uma instrução
SetComputeUnitLimit
em sua transação.
Para calcular o limite de CU apropriado para sua transação, recomendamos os seguintes passos:
- Estime as unidades de CU necessárias simulando a transação
- Adicione uma margem de segurança de 10% a esta estimativa
A taxa de prioridade é determinada pelo limite de unidade de computação solicitado na transação, não pelo número real de unidades de computação 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.
Preço da unidade de computação
O preço da unidade de computação é uma quantidade opcional de
micro-lamports paga por cada CU
solicitada. Você pode pensar no preço de CU como uma gorjeta para incentivar o
validator a priorizar sua transação. Para definir o preço de CU, inclua uma
instrução
SetComputeUnitPrice
em sua transação.
O preço padrão de CU é 0, o que significa que a taxa de priorização padrão também é 0.
Para ajuda na determinação do melhor preço de CU para sua transação, consulte a recomendação de preço de CU em tempo real listada na tabela abaixo.
| Provedor | API de Taxa de Prioridade |
|---|---|
| Helius | Documentação |
| QuickNode | Documentação |
| Triton | Documentação |
Exemplo
Os exemplos abaixo mostram como definir o limite de CU e o preço de CU em uma transação usando os SDKs da Solana.
| SDK | Referência do Código Fonte |
|---|---|
@solana/web3.js (Typescript) | ComputeBudgetProgram |
solana-sdk (Rust) | ComputeBudgetInstruction |
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);
Console
Click to execute the code.
Is this page helpful?