概要
プログラムは、ログ記録、ハッシュ化、暗号化、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_pubkey | Pubkeyを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_sha256 | 1つ以上のバイトスライスに対してSHA-256ハッシュを計算します。 | SyscallHash<Sha256Hasher> |
sol_keccak256 | 1つ以上のバイトスライスに対してKeccak-256ハッシュを計算します。 | SyscallHash<Keccak256Hasher> |
sol_blake3 | 1つ以上のバイトスライスに対してBlake3ハッシュを計算します。機能ゲート付き。 | SyscallHash<Blake3Hasher> |
sol_poseidon | 入力に対してPoseidonハッシュを計算します。機能ゲート付き。 | SyscallPoseidon |
暗号化
| システムコール | 説明 | ソース |
|---|---|---|
sol_secp256k1_recover | 署名されたメッセージハッシュとリカバリIDからsecp256k1公開鍵を復元します。 | SyscallSecp256k1Recover |
sol_curve_validate_point | バイト配列がCurve25519(EdwardsまたはRistretto)上の有効な点であることを検証します。機能ゲート付き。 | SyscallCurvePointValidation |
sol_curve_group_op | EdwardsまたはRistretto点に対してCurve25519群演算(加算、減算、乗算)を実行します。機能ゲート付き。 | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Curve25519 EdwardsまたはRistretto点に対してマルチスカラー乗算を実行します。機能ゲート付き。 | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | alt_bn128(BN254)群演算を実行します:G1加算、G1乗算、ペアリングチェック。機能ゲート付き。 | SyscallAltBn128 |
sol_alt_bn128_compression | alt_bn128 G1およびG2点を圧縮・展開します。機能ゲート付き。 | SyscallAltBn128Compression |
sol_big_mod_exp | 大整数のモジュラー累乗(base^exp mod modulus)を計算します。機能ゲート付き。 | SyscallBigModExp |
CPI
| Syscall | 説明 | ソース |
|---|---|---|
sol_invoke_signed_rust | Rustプログラムからクロスプログラム命令を呼び出します。Rust ABIを使用して命令、アカウント、署名者シードをシリアライズします。 | SyscallInvokeSignedRust |
sol_invoke_signed_c | Cプログラムからクロスプログラム命令を呼び出します。シリアライズにはC SolInstruction ABIを使用します。 | SyscallInvokeSignedC |
Sysvars
| Syscall | 説明 | ソース |
|---|---|---|
sol_get_clock_sysvar | Clock sysvarをプログラムが提供するバッファに書き込みます。 | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | EpochSchedule sysvarをプログラムが提供するバッファに書き込みます。 | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Rent sysvarをプログラムが提供するバッファに書き込みます。 | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | EpochRewards sysvarをプログラムが提供するバッファに書き込みます。 | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | LastRestartSlot 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?