컴퓨트 유닛(CU)과 우선순위 수수료를 사용한 최적 트랜잭션 랜딩

Last updated December 2, 2024

Solana에서 트랜잭션을 전송할 때, 두 가지 핵심 매개변수를 최적화하면 트랜잭션의 성공률과 비용 효율성을 크게 향상시킬 수 있습니다:

우선순위 수수료

우선순위 수수료를 통해 로컬 수수료 시장에서 입찰하여 트랜잭션이 더 빠르게 포함되도록 할 수 있습니다. 네트워크가 혼잡하고 여러 트랜잭션이 동일한 계정을 수정하려고 경쟁할 때, 검증자들은 더 높은 우선순위 수수료를 가진 트랜잭션을 우선시합니다.

우선순위 수수료에 대한 핵심 사항:

  • 다음과 같이 계산됩니다: compute_unit_limit * compute_unit_price
  • 더 높은 수수료는 더 빠른 포함 가능성을 증가시킵니다
  • 현재 네트워크 경쟁에 기반하여 필요한 만큼만 지불하세요

컴퓨트 유닛 제한

컴퓨트 유닛(CU)은 트랜잭션에 필요한 계산 리소스를 나타냅니다. 트랜잭션이 안전 조치로 기본적으로 많은 CU를 요청하지만, 이는 종종 비효율적입니다:

  1. 실제 사용량에 관계없이 요청한 모든 CU에 대해 우선순위 수수료를 지불합니다
  2. 블록은 제한된 CU 용량을 가집니다 - 과도한 CU를 요청하면 블록당 총 트랜잭션 수가 줄어듭니다

CU 제한 최적화의 이점:

  • 필요한 CU에 대해서만 지불하여 트랜잭션 비용 절감
  • 블록당 더 많은 트랜잭션을 허용하여 네트워크 효율성 개선
  • 실행에 충분한 리소스를 여전히 보장

예를 들어, 간단한 토큰 전송은 20,000 CU만 필요할 수 있지만, NFT 민팅은 100,000 CU가 필요할 수 있습니다. 이러한 제한을 적절히 설정하면 비용과 전체 네트워크 처리량을 모두 최적화하는 데 도움이 됩니다.

구현 가이드

이 가이드는 추측하기보다는 프로그래밍적으로 최적 값을 계산하는 방법을 보여줍니다.

코드 예시는 Umi가 아직 이러한 메서드를 구현하지 않았기 때문에 RPC 호출에 fetch를 사용합니다. 공식 지원이 추가되면 Umi의 내장 메서드를 사용하는 것이 좋습니다.

우선순위 수수료 계산

우선순위 수수료를 사용할 때는 경쟁이 고려될 때 가장 좋은 효과를 낸다는 점을 기억하는 것이 중요합니다. 수동으로 큰 숫자를 추가하면 필요 이상으로 많은 수수료를 지불할 수 있고, 너무 낮은 숫자를 사용하면 경쟁이 너무 치열한 경우 트랜잭션이 블록에 포함되지 않을 수 있습니다.

우리 트랜잭션의 계정에 대해 지불된 마지막 우선순위화 수수료를 얻으려면 getRecentPrioritizationFees RPC 호출을 사용할 수 있습니다. 결과를 사용하여 지불된 상위 100개 수수료를 기반으로 평균을 계산합니다. 이 숫자는 경험에 따라 조정할 수 있습니다.

다음 단계가 필요합니다:

  1. 트랜잭션에서 쓰기 가능한 계정 추출
  2. 해당 계정에 대해 지불된 최근 수수료 쿼리
  3. 시장 상황에 기반한 최적 수수료 계산

페이지 하단에서 이를 사용하여 Sol Transfer를 수행하는 전체 예시를 찾을 수 있습니다.

컴퓨트 유닛 계산

트랜잭션 비용을 최적화하고 안정적인 실행을 보장하기 위해 먼저 트랜잭션을 시뮬레이션하여 이상적인 컴퓨트 유닛 제한을 계산할 수 있습니다. 이 접근법은 고정 값을 사용하는 것보다 더 정확하고 리소스의 과도한 할당을 피하는 데 도움이 됩니다.

시뮬레이션 프로세스는 다음과 같이 작동합니다:

  1. 최대 컴퓨트 유닛(1,400,000)으로 트랜잭션 구축
  2. 실제 소비된 컴퓨트 유닛을 측정하기 위해 시뮬레이션
  3. 변동을 고려하여 10% 안전 버퍼 추가
  4. 시뮬레이션이 실패하면 보수적인 기본값으로 대체

Sol Transfer의 전체 예시

위의 코드를 따르고 Umi 인스턴스를 생성하기 위한 일부 상용구를 도입하면 Sol Transfer 트랜잭션을 생성하는 다음과 같은 스크립트가 나올 수 있습니다: