트랜잭션 수수료

모든 Solana 트랜잭션은 validator가 트랜잭션을 처리하는 데 대한 보상으로 기본 수수료(SOL)가 필요합니다. 또한 현재 리더(validator)가 귀하의 트랜잭션을 처리할 가능성을 높이기 위해 선택적으로 우선순위 수수료를 지불할 수 있습니다.

주요 포인트

  • 트랜잭션의 기본 수수료는 트랜잭션의 서명당 5000 lamport입니다.
  • 우선순위 수수료(선택 사항)는 현재 리더가 귀하의 트랜잭션을 처리할 가능성을 높이기 위해 validator에게 지불하는 추가 수수료입니다.
  • 우선순위 수수료는 다음과 같이 계산됩니다: (컴퓨트 유닛 한도 * 컴퓨트 유닛 가격).
  • 컴퓨트 유닛 한도는 트랜잭션이 사용할 수 있는 최대 컴퓨트 유닛입니다.
  • 컴퓨트 유닛 가격은 마이크로 lamport 단위의 컴퓨트 유닛당 가격입니다.
  • 1,000,000 마이크로 lamport = 1 lamport
  • 트랜잭션 수수료 지불자는 System Program이 소유한 계정이어야 합니다.

기본 트랜잭션 수수료

기본 수수료는 트랜잭션을 보내는 비용입니다. 비용은 트랜잭션에 포함된 서명당 5000 lamport입니다.

기본 수수료는 트랜잭션 수수료 지불자의 계정에서 차감되며, 이는 트랜잭션의 첫 번째 서명자입니다. 수수료 지불자는 System Program이 소유한 계정이어야 합니다.

  • 50% 소각: 기본 수수료의 절반이 소각됩니다.
  • 50% 분배: 절반은 트랜잭션을 처리한 validator에게 지급됩니다.

우선순위 수수료

우선순위 수수료는 현재 리더가 귀하의 트랜잭션을 처리할 가능성을 높이기 위해 지불하는 선택적 수수료입니다.

  • SIMD-0096: 트랜잭션을 처리하는 validator가 우선순위 수수료의 100%를 받습니다.

컴퓨트 유닛 및 한도

트랜잭션이 처리될 때, 컴퓨트 유닛(CU)으로 측정되는 계산 리소스를 사용합니다. 각 명령어는 트랜잭션의 컴퓨트 유닛 예산에서 차감됩니다.

  • 최대 한도: 트랜잭션은 최대 1.4백만 컴퓨트 유닛까지 사용할 수 있습니다.
  • 기본 한도: 기본적으로 각 명령어는 최대 200,000 컴퓨트 유닛까지 사용할 수 있습니다.
  • 사용자 지정 한도: 트랜잭션에 SetComputeUnitLimit 명령어를 포함하여 특정 컴퓨트 유닛 한도를 요청할 수 있습니다.

컴퓨트 유닛 사용에 대한 자세한 내용:

컴퓨트 유닛 사용에 대한 자세한 내용은 최적의 컴퓨트 요청 방법 가이드를 참조하세요.

컴퓨트 유닛 가격

컴퓨트 유닛 가격은 요청한 각 컴퓨트 유닛에 대해 지불하는 마이크로 lamport 단위의 선택적 금액입니다. 이 가격은 트랜잭션의 우선순위 수수료를 계산하는 데 사용됩니다.

1,000,000 마이크로 lamport = 1 lamport

현재 컴퓨트 유닛 가격에 대한 실시간 추천을 얻으려면 다음 리소스를 사용하세요:

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

우선순위 수수료에 대한 자세한 내용은 우선순위 수수료 사용 방법 가이드를 참조하세요.

우선순위 수수료 계산

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

우선순위 수수료 = 컴퓨트 유닛 한도 × 컴퓨트 유닛 가격

우선순위 수수료를 설정하는 권장 방법은 먼저 트랜잭션을 시뮬레이션하여 필요한 컴퓨팅 유닛을 추정하는 것입니다. 그런 다음 이 추정치에 10%의 안전 마진을 추가하고 결과 값을 Compute Unit Limit로 사용하세요.

다른 트랜잭션과 비교하여 우선순위가 결정되는 트랜잭션 우선순위는 다음 공식을 사용하여 계산됩니다:

우선순위 = ((컴퓨팅 유닛 한도 * 컴퓨팅 유닛 가격) + 기본 수수료) / (1 + 컴퓨팅 유닛 한도 + 서명 CUs + 쓰기 잠금 CUs)

트랜잭션에서 컴퓨팅 유닛 한도와 가격을 설정하려면 다음 지침을 사용하세요:

이러한 지침을 제공하지 않으면 트랜잭션은 컴퓨팅 유닛 가격이 0(우선순위 수수료 없음)인 기본 컴퓨팅 유닛 한도를 사용합니다.

우선순위 수수료는 실제 사용된 컴퓨팅 유닛이 아니라 트랜잭션에 요청한 컴퓨팅 유닛 한도에 따라 달라집니다. 너무 높은 컴퓨팅 유닛 한도를 설정하거나 기본 양을 사용하면 사용하지 않은 컴퓨팅 유닛에 대해 비용을 지불할 수 있습니다.

예시

다음 예시는 트랜잭션의 컴퓨팅 유닛 한도와 가격을 설정하는 방법을 보여줍니다.

SDK소스 코드 참조
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 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);
Click to execute the code.

Is this page helpful?

목차

페이지 편집