Cada 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 probabilidade de o líder atual processar a 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 probabilidade de o líder atual (validador) processar a 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 (CU) e o limite de CU da transação. (Consulte o guia Como usar taxas de prioridade para mais detalhes sobre taxas de priorização.)
A taxa de priorização é calculada da seguinte forma:
Prioritization fee = CU limit * CU price
A taxa de priorização é usada para determinar a prioridade da sua transação, relativamente a outras transações. É calculada usando a seguinte fórmula:
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)
Limite de unidades de computação
Por
predefinição,
cada instrução recebe
200.000 CUs
e cada transação recebe
1,4 milhão de CUs.
Pode alterar estas predefinições incluindo uma instrução
SetComputeUnitLimit
na sua transação.
Para calcular o limite de CU apropriado para a 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 unidades de computação solicitado na transação, não pelo número real de unidades de computação utilizadas. Se definir um limite de unidades de computação demasiado elevado ou utilizar o valor predefinido, 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 é um valor opcional de
micro-lamports pago por cada CU
solicitada. Pode pensar no preço da CU como uma gorjeta para incentivar o
validator a priorizar a sua transação. Para definir o preço da CU, inclua uma
instrução
SetComputeUnitPrice
na sua transação.
O preço predefinido da CU é 0, o que significa que a taxa de priorização predefinida também é 0.
Para ajuda na determinação do melhor preço de CU para a sua transação, consulte a recomendação de preço de CU em tempo real fornecida na tabela abaixo.
| Fornecedor | 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 numa transação utilizando 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);
Is this page helpful?