Tarifas de transacción

Cada transacción de Solana requiere una tarifa de transacción, pagada en SOL. Las tarifas de transacción se dividen en dos partes: la tarifa base y la tarifa de priorización. La tarifa base compensa a los validadores por procesar la transacción. La tarifa de priorización es una tarifa opcional para aumentar la probabilidad de que el líder actual procese tu transacción.

Tarifa base

Cada transacción cuesta 5000 lamports por firma incluida. Esta tarifa es pagada por el primer firmante de la transacción y debe ser pagada por una cuenta propiedad del System Program. La tarifa base se divide de la siguiente manera:

  • 50% quemado: La mitad es quemada (retirada de la oferta circulante de SOL).
  • 50% distribuido: La mitad es pagada al validator que procesó la transacción.

Tarifa de priorización

Una tarifa de priorización es una tarifa opcional utilizada para aumentar la probabilidad de que el líder actual (validator) procese tu transacción. El validator recibe el 100% de la tarifa de prioridad. Las tarifas de priorización pueden establecerse ajustando el precio de unidad de cómputo (CU) y el límite de CU de la transacción. (Consulta la Guía de cómo usar tarifas de prioridad para más detalles sobre las tarifas de priorización.)

La tarifa de priorización se calcula de la siguiente manera:

Tarifa de priorización = Límite de unidades de cómputo × Precio de unidad de cómputo

La tarifa de priorización se utiliza para determinar la prioridad de tu transacción, en relación con otras transacciones. Se calcula utilizando la siguiente fórmula:

Prioridad de la transacción = Tarifa de priorización / Tamaño de la transacción

Límite de unidades de cómputo

Por defecto, a cada instrucción se le asignan 200,000 CUs y a cada transacción se le asignan 1.4 millones de CUs. Puedes cambiar estos valores predeterminados incluyendo una instrucción SetComputeUnitLimit en tu transacción.

Para calcular el límite de CU apropiado para tu transacción, recomendamos los siguientes pasos:

  1. Estima las unidades CU requeridas simulando la transacción
  2. Añade un margen de seguridad del 10% a esta estimación

La tarifa de prioridad está determinada por el límite de unidades de cómputo solicitado en la transacción, no por el número real de unidades de cómputo 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.

Precio de unidad de cómputo

El precio de unidad de cómputo es una cantidad opcional de micro-lamports pagada por cada CU solicitada. Puedes pensar en el precio de CU como una propina para animar al validator a priorizar tu transacción. Para establecer el precio de CU, incluye una instrucción ComputeBudgetInstruction::set_compute_unit_price en tu transacción.

El precio de CU predeterminado es 0, lo que significa que la tarifa de priorización predeterminada también es 0.

Para ayudarte a determinar el mejor precio de CU para tu transacción, consulta la recomendación de precio de CU en tiempo real proporcionada en la tabla a continuación.

Ejemplo

Los ejemplos a continuación muestran cómo establecer el límite de CU y el precio de CU en una transacción usando los SDK de Solana.

SDKReferencia del código fuente
@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 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);
const signature = await sendAndConfirmTransaction(connection, transaction, [
sender
]);
console.log("Transaction Signature:", signature);
Console
Click to execute the code.

Is this page helpful?

Tabla de Contenidos

Editar Página