이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
솔라나 트랜잭션은 원자적으로 실행되는 명령어 목록입니다. 트랜잭션 구조(명령어, 계정, 서명자, 컴퓨트 예산)를 이해하는 것은 레이디움으로 무엇이든 구축하고, 디버깅하고, 최적화하기 위한 필수 전제 조건입니다. 이 페이지에서는 그 구조, 제약 조건, 그리고 실제 스왑에서 두 가지 수수료 범주(솔라나 네트워크 수수료, 레이디움 프로토콜 수수료)가 어떻게 적용되는지 다룹니다.
트랜잭션 구조
솔라나 트랜잭션은 세 가지 핵심 구성 요소로 이루어져 있습니다:- 메시지: 순서대로 정렬된 명령어 목록, 명령어가 참조하는 계정, 그리고 최근 블록해시입니다.
- 서명: 서명자당 하나씩, 트랜잭션이 승인되었음을 증명합니다.
- 최근 블록해시: 트랜잭션이 최근 것임을 증명합니다. 오래된 블록해시(150개 슬롯 이상)를 가진 트랜잭션은 거부됩니다.
명령어
명령어는 다음을 지정합니다:program_id— 호출할 프로그램입니다.accounts— 프로그램이 접근할 수 있는 계정(및 쓰기 가능/서명자 플래그)입니다.data— 프로그램이 해석하는 불투명한 바이트입니다.
ComputeBudget::SetComputeUnitLimit— 기본 CU 제한을 높입니다.ComputeBudget::SetComputeUnitPrice— 우선순위 수수료를 설정합니다.- 선택사항
CreateAssociatedTokenAccount— 사용자가 없는 경우 출력 ATA를 생성합니다. Raydium::SwapBaseInput— 스왑을 실행합니다.- 선택사항
CloseAccount— 래핑된 SOL ATA를 닫습니다.
raydium.cpmm.swap, raydium.clmm.swap, raydium.liquidity.swap)를 통해, 또는 멀티홉 경로의 경우 raydium.tradeV2.swap을 통해.
트랜잭션의 계정
트랜잭션의 모든 명령어가 접근하는 모든 계정은 트랜잭션의 계정 키 목록에 나열되어야 합니다. 각 계정에는 플래그가 지정됩니다:- 서명자/비서명자: 계정 소유자가 트랜잭션에 서명해야 하나요?
- 쓰기 가능/읽기 전용: 트랜잭션이 계정을 수정할 수 있나요?
solana-fundamentals/account-model 참조). 여러 틱 배열 교차가 있는 CLMM 스왑은 20개 이상일 수 있습니다.
트랜잭션 크기 제한
솔라나는 트랜잭션을 서명, 메시지, 헤더를 포함하여 1232바이트로 제한합니다. 이는 복잡한 트랜잭션의 가장 일반적인 장애물입니다 — 레이디움의 CLMM과 멀티홉 라우팅은 정기적으로 이 제한에 도달합니다. 일반적인 약 1000바이트 레이디움 스왑의 분석:주소 조회 테이블(ALT)
ALT를 사용하면 트랜잭션이 전체 32바이트 공개 키 대신 게시된 테이블의 1바이트 인덱스로 계정을 참조할 수 있습니다. 이는 트랜잭션을 대폭 압축합니다:- 20개 계정을 직접 참조하는 트랜잭션: 공개 키 약 640 B.
- ALT를 사용하는 동일한 트랜잭션: 인덱스 약 20 B + ALT 참조.
컴퓨트 예산
모든 트랜잭션에는 컴퓨트 유닛(CU) 예산이 있습니다. 이를 초과하면 실행이 종료되고 트랜잭션이 실패합니다.- 기본값: 트랜잭션당 200,000 CU.
- 최대값: 트랜잭션당 1,400,000 CU (
ComputeBudget::SetComputeUnitLimit을 통해 상향). - 블록당 상한: 블록당 48M CU (프로토콜 수준).
integration-guides/priority-fee-tuning 참조):
항상
ComputeBudget을 통해 명시적 CU 제한을 설정하세요. 그렇지 않으면 200k 기본값을 받게 되는데, 이는 대부분의 레이디움 명령어에 너무 낮습니다.
우선순위 수수료
기본 트랜잭션 수수료(서명당 5000 라모포트) 외에도 검증자는 점점 더 우선순위 수수료를 지불하는 트랜잭션을 우선시합니다: CU당 마이크로라모포트 단위의 팁입니다.integration-guides/priority-fee-tuning을 참조하세요.
명령어 개수 및 계정 개수 제한
1232바이트 총 제한 외에도:- 트랜잭션당 최대 계정: 128개.
- 명령어당 최대 계정(CPI): 64개.
- 트랜잭션당 최대 명령어: 하드 제한 없음, 크기 제한으로만 제한됨.
- 최대 CPI 깊이: 4 (프로그램이 다른 프로그램을 호출할 수 있고, 그것이 다른 프로그램을 호출할 수 있으며, 4단계까지 깊음).
레이디움 스왑의 수수료 범주
사용자 스왑 트랜잭션은 두 가지 범주의 수수료를 지불합니다:솔라나 네트워크 수수료
검증자에게 SOL로 지불됩니다.- 기본 서명 수수료: 서명당 5000 라모포트. 거의 항상 1개 서명 = 0.000005 SOL.
- 우선순위 수수료: CU 가격 × CU 제한(마이크로라모포트). 혼잡에 따라 변함.
integration-guides/priority-fee-tuning참조.
레이디움 프로토콜 수수료
스왑 금액에서 공제됩니다.- 스왑 수수료: 입력의 백분율 (CPMM 일반적으로 0.25%, CLMM 0.01%–1% 티어별). LP와 프로토콜 목적지 간 분할.
ray/protocol-fees참조.
예: CPMM 0.25% 티어를 통한 $1000 USDC → SOL
슬리피지(가격 영향 + 시장 변동)는 수수료가 아니지만 동일한 최종 결과에 영향을 미칩니다.
버전 지정 트랜잭션
솔라나에는 두 가지 트랜잭션 형식이 있습니다:- 레거시: 원본 형식, ALT 지원 없음.
- v0 (버전 지정): ALT 지원, 향후 버전으로 확장 가능.
블록해시 신선도
트랜잭션은 최근 약 150개 슬롯(약 60초) 내의 블록해시를 포함해야 합니다. 그 범위를 벗어나면 검증자가 거부합니다. 재시도 루프의 경우 각 재시도에서 새로운 블록해시를 가져오세요:integration-guides/priority-fee-tuning을 참조하세요.
병렬 실행
솔라나는 멀티코어 검증자에서 충돌하지 않는 트랜잭션을 병렬로 실행합니다. 두 트랜잭션이 동일한 계정에 모두 쓰면 충돌합니다. 레이디움에 대한 의미:- 동일한 풀의 두 스왑은 병렬로 실행될 수 없습니다 — 둘 다 풀 상태에 씁니다.
- 풀 A의 스왑과 풀 B의 스왑은 계정 목록이 겹치지 않으면 병렬로 실행됩니다.
- 읽기 전용 트랜잭션은 동일한 계정의 쓰기 작업을 차단하지 않습니다(읽기 전용은 자신과 동시이지만 쓰기와는 동시가 아님).
트랜잭션 확인 수준
트랜잭션을 제출할 때 확인 수준을 선택합니다:
스왑 UX의 경우
confirmed가 표준입니다. 큰 가치를 처리하는 작업(풀 생성, 보상 충전)의 경우 finalized가 더 안전합니다.
시뮬레이션
솔라나는 제출 전에 트랜잭션을 시뮬레이션하는 것을 지원합니다:getBestSwapInfo를 계산할 때 내부적으로 시뮬레이션을 사용하여 선택된 경로가 실제로 성공하는지 확인합니다. 시뮬레이션은 무료가 아닙니다 — RPC 용량을 소비합니다 — 하지만 비용을 지불하기 전에 오류를 포착합니다.
포인터
solana-fundamentals/account-model— 트랜잭션의 계정.solana-fundamentals/pdas-and-cpis— 프로그램이 서로를 호출하는 방법.integration-guides/priority-fee-tuning— CU 제한 및 우선순위 수수료 크기 조정.ray/protocol-fees— 레이디움 프로토콜 수수료 구조.

