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로 인코딩된 Pubkey
    • data: <[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)의 pubkey
  • owner: <string|undefined> - 토큰 잔액 소유자의 pubkey
  • programId: <string|undefined> - 계정을 소유한 Token Program의 pubkey
  • uiTokenAmount: <object> -
    • amount: <string> - 소수점을 무시한 문자열 형태의 토큰 원시 금액
    • decimals: <number> - 토큰 발행에 구성된 소수점 자릿수
    • uiAmount: <number|null> - 소수점을 고려한 부동 소수점 형태의 토큰 금액. 사용 중단됨
    • uiAmountString: <string> - 소수점을 고려한 문자열 형태의 토큰 금액

Is this page helpful?

목차

페이지 편집