시스템 호출 참조

요약

프로그램은 로깅, 해싱, 암호화, CPI, 시스템 변수, 메모리 작업 등을 다루는 시스템 호출을 통해 런타임과 상호작용합니다. 각 시스템 호출은 트랜잭션의 공유 예산에서 컴퓨트 유닛을 차감합니다.

시스템 호출

프로그램은 create_program_runtime_environment_v1()에 등록된 시스템 호출을 통해 런타임과 상호작용합니다. 각 시스템 호출은 트랜잭션의 컴퓨트 예산에서 컴퓨트 유닛을 차감합니다.

시스템 호출 비용

각 시스템 호출의 기본 컴퓨트 유닛 비용 상수는 SVMTransactionExecutionCost에 정의되어 있습니다. 일부 시스템 호출은 구현에서 이러한 상수를 더 복잡한 공식으로 결합합니다(예: 입력 크기에 따라 확장하거나 syscall_base_cost 오버헤드를 추가). 정확한 비용 계산은 아래의 개별 시스템 호출 소스 링크를 참조하세요.

사용 가능한 시스템 호출

create_program_runtime_environment_v1()에 등록된 sBPF 프로그램에서 사용 가능한 전체 시스템 호출 세트입니다. 기능 게이트가 적용된 시스템 호출은 클러스터에서 해당 기능이 활성화된 경우에만 사용할 수 있습니다.

제어 흐름

시스템 호출설명소스
abort프로그램을 즉시 중단합니다. LLVM이 지속 불가능한 조건에 대해 삽입하며, 명시적 사용을 위한 것이 아닙니다.SyscallAbort
sol_panic_진단을 위해 파일 이름, 줄 번호, 열 번호와 함께 프로그램을 중단합니다.SyscallPanic

로깅

시스템 호출설명소스
sol_log_UTF-8 문자열 메시지를 프로그램 로그에 기록합니다.SyscallLog
sol_log_64_5개의 u64 값을 16진수로 프로그램 로그에 기록합니다.SyscallLogU64
sol_log_pubkeyPubkey를 base58 문자열로 프로그램 로그에 기록합니다.SyscallLogPubkey
sol_log_compute_units_남은 컴퓨트 유닛을 프로그램 로그에 기록합니다.SyscallLogBpfComputeUnits
sol_log_data임의의 바이트 슬라이스를 base64 인코딩된 데이터로 기록합니다.SyscallLogData

PDA

Syscall설명소스
sol_create_program_address시드와 프로그램 ID로부터 프로그램 주소를 파생합니다. 파생된 주소가 Ed25519 곡선 위에 있으면(유효하지 않은 PDA) 1을 반환합니다.SyscallCreateProgramAddress
sol_try_find_program_address범프 시드를 255부터 1까지 반복하여 유효한 PDA를 찾습니다. 주소와 범프를 반환합니다.SyscallTryFindProgramAddress

해싱

Syscall설명소스
sol_sha256하나 이상의 바이트 슬라이스에 대해 SHA-256 해시를 계산합니다.SyscallHash<Sha256Hasher>
sol_keccak256하나 이상의 바이트 슬라이스에 대해 Keccak-256 해시를 계산합니다.SyscallHash<Keccak256Hasher>
sol_blake3하나 이상의 바이트 슬라이스에 대해 Blake3 해시를 계산합니다. 기능 게이트됨.SyscallHash<Blake3Hasher>
sol_poseidon입력에 대해 Poseidon 해시를 계산합니다. 기능 게이트됨.SyscallPoseidon

암호화

Syscall설명소스
sol_secp256k1_recover서명된 메시지 해시와 복구 ID로부터 secp256k1 공개 키를 복구합니다.SyscallSecp256k1Recover
sol_curve_validate_point바이트 배열이 Curve25519(Edwards 또는 Ristretto)의 유효한 점인지 검증합니다. 기능 게이트됨.SyscallCurvePointValidation
sol_curve_group_opEdwards 또는 Ristretto 점에 대해 Curve25519 그룹 연산(덧셈, 뺄셈, 곱셈)을 수행합니다. 기능 게이트됨.SyscallCurveGroupOps
sol_curve_multiscalar_mulCurve25519 Edwards 또는 Ristretto 점에 대해 다중 스칼라 곱셈을 수행합니다. 기능 게이트됨.SyscallCurveMultiscalarMultiplication
sol_alt_bn128_group_opalt_bn128(BN254) 그룹 연산을 수행합니다: G1 덧셈, G1 곱셈, 페어링 검사. 기능 게이트됨.SyscallAltBn128
sol_alt_bn128_compressionalt_bn128 G1 및 G2 점을 압축 및 압축 해제합니다. 기능 게이트됨.SyscallAltBn128Compression
sol_big_mod_exp큰 정수 모듈러 지수 연산(base^exp mod modulus)을 계산합니다. 기능 게이트됨.SyscallBigModExp

CPI

Syscall설명소스
sol_invoke_signed_rustRust 프로그램에서 크로스 프로그램 명령을 호출합니다. Rust ABI를 사용하여 명령, 계정 및 서명자 시드를 직렬화합니다.SyscallInvokeSignedRust
sol_invoke_signed_cC 프로그램에서 크로스 프로그램 명령을 호출합니다. 직렬화를 위해 C SolInstruction ABI를 사용합니다.SyscallInvokeSignedC

Sysvars

Syscall설명소스
sol_get_clock_sysvarClock sysvar를 프로그램이 제공한 버퍼에 씁니다.SyscallGetClockSysvar
sol_get_epoch_schedule_sysvarEpochSchedule sysvar를 프로그램이 제공한 버퍼에 씁니다.SyscallGetEpochScheduleSysvar
sol_get_rent_sysvarRent sysvar를 프로그램이 제공한 버퍼에 씁니다.SyscallGetRentSysvar
sol_get_epoch_rewards_sysvarEpochRewards sysvar를 프로그램이 제공한 버퍼에 씁니다.SyscallGetEpochRewardsSysvar
sol_get_last_restart_slotLastRestartSlot sysvar를 프로그램이 제공한 버퍼에 씁니다. 기능 게이트 적용.SyscallGetLastRestartSlotSysvar
sol_get_fees_sysvar더 이상 사용되지 않는 Fees sysvar를 프로그램이 제공한 버퍼에 씁니다. 기능 게이트 적용(더 이상 사용되지 않음).SyscallGetFeesSysvar
sol_get_sysvar일반 sysvar 액세스: pubkey, 오프셋 및 길이로 캐시된 모든 sysvar에서 바이트 슬라이스를 읽습니다(SIMD-0127). 기능 게이트 적용.SyscallGetSysvar

메모리 작업

Syscall설명소스
sol_memcpy_소스에서 대상으로 n 바이트를 복사합니다. VM 주소 공간에서 영역이 겹치면 중단됩니다.SyscallMemcpy
sol_memmove_소스에서 대상으로 n 바이트를 복사하며, 겹치는 영역을 올바르게 처리합니다.SyscallMemmove
sol_memcmp_두 메모리 영역의 n 바이트를 비교합니다. 결과(첫 번째로 다른 바이트 비교)를 결과 주소에 씁니다.SyscallMemcmp
sol_memset_메모리 영역의 n 바이트를 지정된 바이트 값으로 채웁니다.SyscallMemset

프로그램 데이터

시스템 콜설명소스
sol_set_return_data현재 명령어에 대한 반환 데이터(최대 1,024바이트)를 설정합니다. CPI가 반환된 후 호출자가 읽을 수 있습니다.SyscallSetReturnData
sol_get_return_data가장 최근 CPI에서 설정한 반환 데이터를 읽습니다. 데이터 길이와 이를 설정한 프로그램 ID를 반환합니다.SyscallGetReturnData
sol_get_processed_sibling_instruction동일한 스택 높이에서 이전에 실행된 형제 명령어를 역순 인덱스로 검색합니다. 프로그램 ID, 데이터 및 계정 메타를 반환합니다.SyscallGetProcessedSiblingInstruction
sol_get_stack_height현재 호출 스택 높이를 반환합니다. 높이 1 = 최상위 명령어; 각 CPI마다 1씩 증가합니다.SyscallGetStackHeight

컴퓨팅

시스템 콜설명소스
sol_remaining_compute_units트랜잭션 예산에서 남은 컴퓨팅 유닛 수를 반환합니다. 기능 게이트 적용 대상입니다.SyscallRemainingComputeUnits

Epoch 스테이크

시스템 콜설명소스
sol_get_epoch_stake전체 클러스터 스테이크(널 포인터) 또는 현재 epoch에 대한 특정 투표 계정의 위임된 스테이크를 반환합니다(SIMD-0133). 기능 게이트 적용 대상입니다.SyscallGetEpochStake

메모리 할당

시스템 콜설명소스
sol_alloc_free_동적 메모리 할당을 위한 레거시 범프 할당자입니다. 새로운 배포에서는 비활성화되며, 기능 게이트 이전에 배포된 프로그램에서만 사용할 수 있습니다.SyscallAllocFree

Is this page helpful?

목차

페이지 편집

관리자

© 2026 솔라나 재단.
모든 권리 보유.
연결하기