Solana 트랜잭션 디코더

지갑이 서명을 요청하는 base64나 RPC가 반환하는 문자열을 붙여넣으세요. 디코더는 서명자, 계정, 명령을 나열하고, 주요 프로그램의 이름을 표시하며, SOL과 토큰 전송을 요약합니다.

서명 여부와 무관하게 가능합니다. 디코딩은 브라우저에서 실행되며 아무것도 외부로 전송되지 않으므로, 서명을 앞둔 미서명 트랜잭션에도 안전합니다.
예시:

브라우저에서 JavaScript로 디코딩됩니다. 주소는 절대 업로드되거나 저장되지 않습니다.

직렬화된 Solana 트랜잭션이란 무엇인가요?

직렬화된 Solana 트랜잭션은 압축된 바이트 배열입니다. 개수 접두사가 붙은 64바이트 ed25519 서명 목록 뒤에 메시지가 오며, 메시지에는 헤더(서명자 수와 읽기 전용 계정 수), 32바이트 키로 된 계정 주소, 최근 blockhash, 그리고 각각 프로그램과 계정을 인덱스로 참조하는 명령들이 들어 있습니다. 지갑과 RPC 노드는 이를 base64 또는 base58로 주고받으며, 첫 번째 서명이 트랜잭션 ID 역할도 합니다.

결과 읽기

Legacy vs. versioned (v0) 메시지

속성Legacyv0 (versioned)
메시지 접두사없음; 헤더로 시작헤더 앞에 0x80 버전 바이트
계정1232바이트 한도까지 모두 인라인으로 나열인라인 + address lookup table 인덱스
오프라인 해석 가능예, 모든 계정이 메시지 안에 있음lookup table 항목은 온체인 데이터 필요
주요 생성 주체단순 지갑, 구형 SDKDEX 애그리게이터, 계정이 많은 모든 것

예시

SOL 전송 메시지에는 3개의 계정이 있습니다: 발신자(서명자, 쓰기 가능), 수신자(쓰기 가능), System Program 11111111111111111111111111111111. 단일 명령은 계정 인덱스 2를 가리키며 데이터는 02000000(명령 2 = Transfer, little-endian u32) 뒤에 little-endian u64 수량이 이어지므로, 00e1f50500000000은 100,000,000 lamports = 0.1 SOL입니다. USDC 전송은 대신 Token 프로그램을 대상으로 수량과 decimals = 6을 담은 TransferChecked 명령을 사용합니다.

지갑 프롬프트 확인하기

dApp이 서명을 요청하면 지갑은 보통 시뮬레이션을 표시합니다. 진실을 확인하고 싶다면 dApp에서 직렬화된 메시지를 로그로 출력해(대부분의 라이브러리는 transaction.serialize({ requireAllSignatures: false })를 제공) 여기에 붙여넣으세요. Compute Budget 설정과 시뮬레이션 요약이 숨길 수 있는 SetAuthority나 Approve를 포함한 모든 명령을 볼 수 있습니다.

관련 도구: Solana 주소 검증기, lamports 변환기, devnet 일괄 전송.

자주 묻는 질문

어떤 형식이 작동하나요?

encoding base64로 호출한 getTransaction, 지갑의 signTransaction, 또는 Transaction.serialize()의 base64. sendTransaction에서 사용하는 base58. 원시 hex. 서명 배열이 없는 메시지만 있는 경우도 허용되며, 일부 지갑이 서명 전에 보여주는 것이 바로 이것입니다.

v0 트랜잭션이란 무엇인가요?

Versioned 트랜잭션(v0)은 1232바이트 한도 안에 더 많은 계정을 담기 위해 address lookup table에 저장된 계정을 참조할 수 있습니다. 디코더는 테이블 주소와 인덱스를 표시하지만, 그 뒤의 실제 계정은 온체인에 있어 오프라인에서 해석할 수 없으며 'lookup-table account #n'으로 표시됩니다.

트랜잭션 서명은 해시와 같은 것인가요?

Solana에서는 첫 번째 서명이 트랜잭션 ID 역할을 합니다. 서명 슬롯이 0이 아닐 때 표시되며, 미서명 트랜잭션에는 아직 ID가 없습니다.

어떤 명령이 디코딩되나요?

System Program 전송과 계정 생성, SPL Token 및 Token-2022 전송, 승인, 발행, 소각, 닫기(checked 변형은 소수점이 적용된 수량 표시), Associated Token Account 생성, Compute Budget 한도와 가격, Memo 텍스트. 그 외 프로그램은 알려진 경우 이름으로 표시되며(Jupiter, Raydium, Orca, Metaplex) 원시 계정과 데이터를 함께 보여줍니다.

1232바이트 한도란 무엇인가요?

Solana 트랜잭션은 하나의 네트워크 패킷에 들어가야 합니다. IPv6 MTU 1280바이트에서 헤더를 빼면 직렬화된 트랜잭션에 1232바이트가 남습니다. 계정마다 32바이트, 서명마다 64바이트가 들기 때문에 큰 트랜잭션은 lookup table을 사용합니다.

SPL Transfer의 수량이 왜 원시 단위로 표시되나요?

일반 Transfer 명령은 소수점 자릿수를 담지 않으며 TransferChecked만 담습니다. mint의 소수점 자릿수를 알게 되면 소수점 변환기로 원시 단위를 변환하세요.