요약
Instructions sysvar(Sysvar1nstructions1111111111111111111111111)를 사용하면
프로그램이 현재 트랜잭션의 모든 최상위 명령어를 인덱스 또는 상대 오프셋으로
읽을 수 있습니다. CPI 내부 명령어는 접근할 수 없습니다.
Instructions sysvar
프로그램은 Instructions
sysvar(Sysvar1nstructions1111111111111111111111111)를 통해 현재 트랜잭션의
모든 최상위 명령어를 검사할 수 있습니다. 이를 통해 프로그램은 동일한 트랜잭션
내의 다른 명령어를 검사할 수 있으며, 예를 들어 특정 명령어가 실행 중인 명령어와
동일한 트랜잭션에 있는지 확인할 수 있습니다.
Instructions sysvar는 트랜잭션 메시지의 최상위 명령어만 포함합니다. CPI를 통해 호출된 내부 명령어는 이 sysvar를 통해 접근할 수 없습니다.
instructions sysvar는 일반적인 Sysvar 트레이트를 통해 접근되지 않습니다.
대신
solana_instructions_sysvar
크레이트의 자유 함수를 통해 접근됩니다.
sysvar 데이터는 사용자 정의 바이너리 레이아웃으로 직렬화됩니다:
| 오프셋 | 크기 | 설명 |
|---|---|---|
| 0 | 2 | num_instructions (u16, 리틀 엔디안) |
| 2 | 2 * N | 각 명령어의 바이트 오프셋 (각각 u16) |
| 가변 | 가변 | 직렬화된 명령어 데이터 |
| 마지막 2바이트 | 2 | 현재 명령어 인덱스 (u16, 리틀 엔디안) |
각 직렬화된 명령어는 다음을 포함합니다: 계정 수(u16), 33바이트 항목으로 구성된 계정들(1바이트 플래그 + 32바이트 pubkey), 프로그램 ID(32바이트), 데이터 길이(u16), 그리고 원시 데이터 바이트.
주요 함수:
load_current_index_checked(account_info): 현재 실행 중인 명령어의 인덱스를 반환합니다. 런타임은 새로운 최상위 명령어가 시작될 때마다 이 값을 업데이트합니다.load_instruction_at_checked(index, account_info): 주어진 절대 인덱스의 명령어를 역직렬화합니다.get_instruction_relative(offset, account_info): 현재 명령어를 기준으로 상대적인 명령어를 로드합니다(예: 이전 명령어는-1, 다음 명령어는1).
Is this page helpful?