Tarifas de transacción
Cada transacción de Solana requiere una tarifa base (SOL) para compensar a los validadores por procesar la transacción. También puedes pagar una tarifa de priorización opcional para aumentar la probabilidad de que el líder actual (validator) procese tu transacción.
Puntos clave
- La tarifa base para una transacción es de 5000 lamports por firma en la transacción.
- La tarifa de priorización (opcional) es una tarifa extra que pagas al validator para aumentar la probabilidad de que el líder actual procese tu transacción.
- La tarifa de priorización equivale a: (límite de unidades de cómputo * precio de unidad de cómputo).
- El límite de unidades de cómputo es el máximo de unidades de cómputo que tu transacción puede utilizar.
- El precio de unidad de cómputo es el precio por unidad de cómputo, en micro-lamports.
- 1.000.000 de micro lamports = 1 lamport
- El pagador de la tarifa de transacción debe ser una cuenta propiedad del System Program.
Tarifa base de transacción
La tarifa base es el costo para enviar una transacción. El costo es de 5000 lamports por firma incluida en la transacción.
La tarifa base se deduce de la cuenta del pagador de la tarifa de transacción, que es el primer firmante de la transacción. El pagador de la tarifa debe ser una cuenta propiedad del System Program.
- 50% Quemado: La mitad de la tarifa base se quema.
- 50% Distribución: La mitad se paga al validator que procesó la transacción.
Tarifa de priorización
La tarifa de priorización es una tarifa opcional que se paga para aumentar la probabilidad de que el líder actual procese tu transacción.
- SIMD-0096: El validator que procesa la transacción recibe el 100% de la tarifa de prioridad.
Unidades de cómputo y límites
Cuando se procesa una transacción, utiliza recursos computacionales medidos en unidades de cómputo (CU). Cada instrucción deduce del presupuesto de unidades de cómputo de la transacción.
- Límite máximo: Una transacción puede usar hasta 1.4 millones de unidades de cómputo.
- Límite predeterminado: Por defecto, cada instrucción puede usar hasta 200,000 unidades de cómputo.
- Límite personalizado: Puedes solicitar un límite específico de unidades de
cómputo incluyendo una instrucción
SetComputeUnitLimit
en tu transacción.
Para más detalles sobre el uso de unidades de cómputo:
Consulta la guía Cómo solicitar cómputo óptimo para más detalles sobre el uso de unidades de cómputo.
Precio de unidad de cómputo
El precio de unidad de cómputo es una cantidad opcional, especificada en micro-lamports, que pagas por cada unidad de cómputo solicitada. Este precio se utiliza para calcular la tarifa de priorización para tu transacción.
Utiliza estos recursos para obtener recomendaciones en tiempo real sobre el precio actual de unidad de cómputo:
Proveedor | API de Tarifas Prioritarias |
---|---|
Helius | Documentación |
Triton | Documentación |
Consulta la guía Cómo usar tarifas de prioridad para más detalles sobre las tarifas de prioridad.
Calcular tarifa de priorización
La tarifa de priorización se calcula como:
Tarifa de priorización = Límite de unidades de cómputo × Precio de unidad de cómputo
Utiliza estas instrucciones para establecer el límite y precio de unidades de cómputo en una transacción:
SetComputeUnitLimit
para establecer un límite específico de unidades.SetComputeUnitPrice
para definir el precio por unidad de cómputo.
Si no proporcionas estas instrucciones, la transacción utiliza el límite predeterminado de unidades de cómputo con un precio de unidad de cómputo de 0 (sin tarifa de priorización).
La tarifa prioritaria depende del límite de unidades de cómputo que solicites para la transacción, no de las unidades de cómputo realmente utilizadas. Si estableces un límite de unidades de cómputo demasiado alto o usas la cantidad predeterminada, podrías pagar por unidades de cómputo no utilizadas.
Ejemplos
Los siguientes ejemplos muestran cómo establecer el límite de unidades de cómputo y el precio para una transacción.
SDK | Referencia del código fuente |
---|---|
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?