Solana RPC 메소드를 위한 일반적인 JSON 데이터 구조
다양한 Solana RPC 메소드는 특정 키 값으로 채워진 구조화된 JSON 객체 형태로 더 복잡한 응답을 반환합니다.
가장 일반적인 JSON 데이터 구조는 다음과 같습니다:
트랜잭션
Solana의 트랜잭션은 다른 블록체인의 트랜잭션과 상당히 다릅니다. Solana의 트랜잭션에 대해 알아보려면 트랜잭션의 구조를 검토하세요.
JSON
트랜잭션의 JSON 구조는 다음과 같이 정의됩니다:
message: <object>
- 트랜잭션의 내용을 정의합니다.accountKeys: <array[string]>
- 트랜잭션에서 사용되는 base-58로 인코딩된 공개 키 목록으로, 명령어와 서명에 사용됩니다. 처음message.header.numRequiredSignatures
개의 공개 키는 반드시 트랜잭션에 서명해야 합니다.header: <object>
- 트랜잭션에 필요한 계정 유형과 서명에 대한 세부 정보를 제공합니다.numRequiredSignatures: <number>
- 트랜잭션을 유효하게 만들기 위해 필요한 총 서명 수입니다. 서명은message.accountKeys
의 처음numRequiredSignatures
와 일치해야 합니다.numReadonlySignedAccounts: <number>
- 서명된 키 중 마지막numReadonlySignedAccounts
개는 읽기 전용 계정입니다. 프로그램은 단일 PoH 항목 내에서 읽기 전용 계정을 로드하는 여러 트랜잭션을 처리할 수 있지만, lamport를 입금하거나 출금하거나 계정 데이터를 수정할 수는 없습니다. 동일한 읽기-쓰기 계정을 대상으로 하는 트랜잭션은 순차적으로 평가됩니다.numReadonlyUnsignedAccounts: <number>
- 서명되지 않은 키 중 마지막numReadonlyUnsignedAccounts
개는 읽기 전용 계정입니다.
recentBlockhash: <string>
- 트랜잭션 중복을 방지하고 트랜잭션에 수명을 부여하기 위해 사용되는 원장의 최근 블록의 base-58로 인코딩된 해시입니다.instructions: <array[object]>
- 순차적으로 실행되고 모두 성공할 경우 하나의 원자적 트랜잭션으로 커밋되는 프로그램 명령어 목록입니다.programIdIndex: <number>
- 이 명령어를 실행하는 프로그램 계정을 나타내는message.accountKeys
배열의 인덱스입니다.accounts: <array[number]>
- 프로그램에 전달할 계정을 나타내는message.accountKeys
배열의 순서가 지정된 인덱스 목록입니다.data: <string>
- base-58 문자열로 인코딩된 프로그램 입력 데이터입니다.
addressTableLookups: <array[object]|undefined>
- 트랜잭션이 온체인 주소 조회 테이블에서 주소를 동적으로 로드하는 데 사용하는 주소 테이블 조회 목록입니다.maxSupportedTransactionVersion
가 설정되지 않은 경우 정의되지 않습니다.accountKey: <string>
- 주소 조회 테이블 계정의 base-58로 인코딩된 공개 키입니다.writableIndexes: <array[number]>
- 조회 테이블에서 쓰기 가능한 계정의 주소를 로드하는 데 사용되는 인덱스 목록입니다.readonlyIndexes: <array[number]>
- 조회 테이블에서 읽기 전용 계정의 주소를 로드하는 데 사용되는 인덱스 목록입니다.
signatures: <array[string]>
- 트랜잭션에 적용된 base-58로 인코딩된 서명 목록입니다. 이 목록은 항상 길이가message.header.numRequiredSignatures
이며 비어 있지 않습니다. 인덱스i
의 서명은message.accountKeys
의 인덱스i
에 있는 공개 키에 해당합니다. 첫 번째 서명은 트랜잭션 ID로 사용됩니다.
JSON 파싱됨
트랜잭션의 JSON 파싱된 구조는 일반 JSON 형식과 유사한 구조를 따르며, 계정 및 명령어 정보에 대한 추가 파싱이 포함됩니다:
message: <object>
- 트랜잭션의 내용을 정의합니다.accountKeys: <array[object]>
- 트랜잭션에서 사용하는 계정 정보 목록입니다.pubkey: <string>
- 계정의 base-58로 인코딩된 공개 키입니다.signer: <boolean>
- 계정이 필수 트랜잭션 서명자인지 나타냅니다.writable: <boolean>
- 계정이 쓰기 가능한지 나타냅니다.source: <string>
- 계정의 출처(트랜잭션 또는 조회 테이블)입니다.
recentBlockhash: <string>
- 트랜잭션 중복을 방지하고 트랜잭션 수명을 부여하기 위해 사용되는 원장의 최근 블록의 base-58로 인코딩된 해시입니다.instructions: <array[object]>
- 파싱된 프로그램 명령어 목록입니다.program: <string>
- 호출되는 프로그램의 이름입니다.programId: <string>
- 프로그램의 base-58로 인코딩된 공개 키입니다.stackHeight: <number|null>
- 명령어의 스택 높이입니다.parsed: <object>
- 프로그램별 파싱된 데이터입니다.type: <string>
- 명령어 유형(예: "transfer")입니다.info: <object>
- 프로그램 및 명령어 유형에 특화된 파싱된 명령어 정보입니다.
signatures: <array[string]>
- 트랜잭션에 적용된 base-58로 인코딩된 서명 목록입니다.
트랜잭션 상태 메타데이터
err: <object|null>
- 트랜잭션이 실패한 경우 오류, 트랜잭션이 성공한 경우 null입니다. TransactionError 정의fee: <u64>
- 이 트랜잭션에 부과된 수수료, u64 정수로 표시preBalances: <array>
- 트랜잭션이 처리되기 전 u64 계정 잔액 배열postBalances: <array>
- 트랜잭션이 처리된 후 u64 계정 잔액 배열innerInstructions: <array|null>
- 내부 명령어 목록 또는 이 트랜잭션 중에 내부 명령어 기록이 활성화되지 않은 경우null
preTokenBalances: <array|undefined>
- 트랜잭션이 처리되기 전 토큰 잔액 목록 또는 이 트랜잭션 중에 토큰 잔액 기록이 아직 활성화되지 않은 경우 생략됨postTokenBalances: <array|undefined>
- 트랜잭션이 처리된 후 토큰 잔액 목록 또는 이 트랜잭션 중에 토큰 잔액 기록이 아직 활성화되지 않은 경우 생략됨logMessages: <array|null>
- 문자열 로그 메시지 배열 또는 이 트랜잭션 중에 로그 메시지 기록이 활성화되지 않은 경우null
rewards: <array|null>
- 트랜잭션 수준 보상; 다음을 포함하는 JSON 객체 배열:pubkey: <string>
- 보상을 받은 계정의 공개 키, base-58로 인코딩된 문자열lamports: <i64>
- 계정에 입금 또는 출금된 보상 lamport 수, i64로 표시postBalance: <u64>
- 보상이 적용된 후 lamport 단위의 계정 잔액rewardType: <string|undefined>
- 보상 유형: "fee", "rent", "voting", "staking"commission: <u8|undefined>
- 보상이 입금될 때의 투표 계정 수수료, 투표 및 스테이킹 보상에만 존재
- 사용 중단됨:
status: <object>
- 트랜잭션 상태"Ok": <null>
- 트랜잭션이 성공함"Err": <ERR>
- 트랜잭션이 TransactionError로 실패함
loadedAddresses: <object|undefined>
- 주소 조회 테이블에서 로드된 트랜잭션 주소. 요청 매개변수에maxSupportedTransactionVersion
가 설정되지 않았거나 요청 매개변수에jsonParsed
인코딩이 설정된 경우 정의되지 않음.writable: <array[string]>
- 쓰기 가능한 로드된 계정의 base-58로 인코딩된 주소의 정렬된 목록readonly: <array[string]>
- 읽기 전용 로드된 계정의 base-58로 인코딩된 주소의 정렬된 목록
returnData: <object|undefined>
- 트랜잭션의 명령어에 의해 생성된 가장 최근의 반환 데이터, 다음 필드 포함:programId: <string>
- 반환 데이터를 생성한 프로그램, base-58로 인코딩된 Pubkeydata: <[string, encoding]>
- 반환 데이터 자체, base-64로 인코딩된 이진 데이터
computeUnitsConsumed: <u64|undefined>
- 트랜잭션에서 소비한 컴퓨팅 유닛 수version: <"legacy"|number|undefined>
- 트랜잭션 버전. 요청 매개변수에maxSupportedTransactionVersion
가 설정되지 않은 경우 정의되지 않음.signatures: <array>
- 트랜잭션 세부 정보에 대해 "signatures"가 요청된 경우 존재; 블록의 트랜잭션 순서에 해당하는 서명 문자열 배열
내부 명령어
Solana 런타임은 트랜잭션 처리 중에 호출되는 크로스 프로그램 명령어를 기록하고, 트랜잭션 명령어별로 체인상에서 실행된 내용에 대한 더 큰 투명성을 제공합니다. 호출된 명령어는 원래 트랜잭션 명령어별로 그룹화되며 처리 순서대로 나열됩니다.
내부 명령어의 JSON 구조는 다음과 같은 구조의 객체 목록으로 정의됩니다:
index: number
- 내부 명령어가 발생한 트랜잭션 명령어의 인덱스instructions: <array[object]>
- 단일 트랜잭션 명령어 중에 호출된 내부 프로그램 명령어의 순서가 지정된 목록programIdIndex: <number>
- 이 명령어를 실행하는 프로그램 계정을 나타내는message.accountKeys
배열의 인덱스accounts: <array[number]>
- 프로그램에 전달할 계정을 나타내는message.accountKeys
배열의 순서가 지정된 인덱스 목록data: <string>
- base-58 문자열로 인코딩된 프로그램 입력 데이터
토큰 잔액
토큰 잔액의 JSON 구조는 다음과 같은 구조의 객체 목록으로 정의됩니다:
accountIndex: <number>
- 토큰 잔액이 제공되는 계정의 인덱스mint: <string>
- 토큰 발행(mint)의 pubkeyowner: <string|undefined>
- 토큰 잔액 소유자의 pubkeyprogramId: <string|undefined>
- 계정을 소유한 Token Program의 pubkeyuiTokenAmount: <object>
-amount: <string>
- 소수점을 무시한 문자열 형태의 토큰 원시 금액decimals: <number>
- 토큰 발행에 구성된 소수점 자릿수uiAmount: <number|null>
- 소수점을 고려한 부동 소수점 형태의 토큰 금액. 사용 중단됨uiAmountString: <string>
- 소수점을 고려한 문자열 형태의 토큰 금액
Is this page helpful?