트랜잭션 수수료

모든 Solana 트랜잭션은 SOL로 지불하는 트랜잭션 수수료가 필요합니다. 트랜잭션 수수료는 기본 수수료와 우선순위 수수료 두 부분으로 나뉩니다. 기본 수수료는 트랜잭션 처리에 대해 validator에게 보상합니다. 우선순위 수수료는 현재 리더가 귀하의 트랜잭션을 처리할 가능성을 높이기 위한 선택적 수수료입니다.

기본 수수료

모든 트랜잭션은 포함된 서명당 5000 램포트의 비용이 발생합니다. 이 수수료는 트랜잭션의 첫 번째 서명자가 지불합니다. System Program이 소유한 계정만 트랜잭션 수수료를 지불할 수 있습니다. 기본 수수료는 다음과 같이 분배됩니다:

우선순위 수수료

우선순위 수수료는 현재 리더(validator)가 귀하의 트랜잭션을 처리할 가능성을 높이기 위한 선택적 수수료입니다. validator는 우선순위 수수료의 100%를 받습니다. 우선순위 수수료는 트랜잭션의 컴퓨트 유닛 (CU) 가격과 CU 한도를 조정하여 설정할 수 있습니다. (우선순위 수수료에 대한 자세한 내용은 우선순위 수수료 사용 가이드를 참조하세요.)

우선순위 수수료는 다음과 같이 계산됩니다:

Prioritization fee formula
Prioritization fee = CU limit * CU price

우선순위 수수료는 다른 트랜잭션과 비교하여 트랜잭션의 우선순위를 결정하는 데 사용됩니다. 다음 공식을 사용하여 계산됩니다:

Transaction priority formula
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)

컴퓨트 유닛 한도

기본적으로, 각 명령어에는 200,000 CU가 할당되고 각 트랜잭션에는 1.4백만 CU가 할당됩니다. 트랜잭션에 SetComputeUnitLimit 명령어를 포함시켜 이러한 기본값을 변경할 수 있습니다.

트랜잭션에 적합한 컴퓨트 유닛 한도를 계산하기 위해 다음 단계를 권장합니다:

  1. 트랜잭션을 시뮬레이션하여 필요한 컴퓨트 유닛을 추정합니다
  2. 이 추정치에 10%의 안전 마진을 추가합니다

우선순위 수수료는 실제 사용된 컴퓨트 유닛 수가 아닌, 요청된 컴퓨트 유닛 한도 트랜잭션에 의해 결정됩니다. 컴퓨트 유닛 한도를 너무 높게 설정하거나 기본 값을 사용하면 사용하지 않은 컴퓨트 유닛에 대해 비용을 지불할 수 있습니다.

컴퓨트 유닛 가격

컴퓨트 유닛 가격은 요청된 각 CU에 대해 지불하는 선택적인 마이크로-램포트 금액입니다. CU 가격은 validator가 귀하의 트랜잭션에 우선순위를 부여하도록 장려하는 팁으로 생각할 수 있습니다. CU 가격을 설정하려면 트랜잭션에 ComputeBudgetProgram.setComputeUnitPrice 명령어를 포함하세요.

기본 CU 가격은 0이며, 이는 기본 우선순위 수수료도 0임을 의미합니다.

트랜잭션에 가장 적합한 CU 가격을 결정하는 데 도움이 필요하면, 아래 표에 나열된 실시간 CU 가격 추천을 참조하세요.

제공자우선순위 수수료 API
Helius문서
QuickNode문서
Triton문서

예시

아래 예시는 Solana SDK를 사용하여 트랜잭션에 CU 한도와 CU 가격을 설정하는 방법을 보여줍니다.

SDK소스 코드 참조
@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?

목차

페이지 편집

관리자

© 2025 솔라나 재단.
모든 권리 보유.