システムコールリファレンス

概要

プログラムは、ログ記録、ハッシュ化、暗号化、CPI、sysvar、メモリ操作などをカバーするシステムコールを通じてランタイムと対話します。各システムコールは、トランザクションの共有バジェットからコンピュートユニットを差し引きます。

システムコール

プログラムは、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

システムコール説明ソース
sol_create_program_addressシードとプログラムIDからプログラムアドレスを導出します。導出されたアドレスがEd25519曲線上にある場合(無効なPDA)、1を返します。SyscallCreateProgramAddress
sol_try_find_program_addressバンプシードを255から1まで反復して有効なPDAを検索します。アドレスとバンプを返します。SyscallTryFindProgramAddress

ハッシュ化

システムコール説明ソース
sol_sha2561つ以上のバイトスライスに対してSHA-256ハッシュを計算します。SyscallHash<Sha256Hasher>
sol_keccak2561つ以上のバイトスライスに対してKeccak-256ハッシュを計算します。SyscallHash<Keccak256Hasher>
sol_blake31つ以上のバイトスライスに対してBlake3ハッシュを計算します。機能ゲート付き。SyscallHash<Blake3Hasher>
sol_poseidon入力に対してPoseidonハッシュを計算します。機能ゲート付き。SyscallPoseidon

暗号化

システムコール説明ソース
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_2つのメモリ領域の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

エポックステーク

システムコール説明ソース
sol_get_epoch_stakeクラスター全体のステーク(nullポインタ)または現在のエポックにおける特定の投票アカウントの委任ステークを返します(SIMD-0133)。機能ゲート付き。SyscallGetEpochStake

メモリ割り当て

システムコール説明ソース
sol_alloc_free_動的メモリ割り当て用のレガシーバンプアロケータ。新規デプロイメントでは無効化されており、機能ゲート前にデプロイされたプログラムでのみ利用可能です。SyscallAllocFree

Is this page helpful?

目次

ページを編集

管理運営

© 2026 Solana Foundation.
無断転載を禁じます。
つながろう