Cross Program Invocation

Cross Program Invocation (CPI) adalah ketika satu program memanggil sebuah instruksi pada program lain selama eksekusi. CPI memungkinkan komposabilitas: instruksi program apa pun dapat dipanggil oleh program lain mana pun di jaringan.

Contoh cross-program invocationContoh cross-program invocation

Fakta kunci

  • Dua fungsi: invoke (tanpa penandatanganan PDA) dan invoke_signed (dengan penandatanganan PDA).
  • Ekstensi hak istimewa: Hak istimewa akun (signer, writable) diperluas dari pemanggil ke yang dipanggil. Yang dipanggil tidak dapat meningkatkan hak istimewa melebihi apa yang diberikan pemanggil.
  • Anggaran komputasi bersama: Konsumsi CU yang dipanggil mengurangi anggaran pemanggil yang tersisa.
  • Reentrancy: Rekursi diri langsung diperbolehkan (A->A->A). Reentrancy tidak langsung tidak diperbolehkan (A->B->A mengembalikan ReentrancyNotAllowed).

Batasan

BatasanNilaiSumber
Kedalaman stack instruksi maks5 (9 dengan SIMD-0268)MAX_INSTRUCTION_STACK_DEPTH, MAX_INSTRUCTION_STACK_DEPTH_SIMD_0268
Biaya pemanggilan CPI1.000 CU (946 dengan SIMD-0339)DEFAULT_INVOCATION_COST, INVOKE_UNITS_COST_SIMD_0339
Penandatangan PDA maks per CPI16MAX_SIGNERS
instruction data CPI maks10 KiB (10.240 byte)MAX_INSTRUCTION_DATA_LEN
Return data maks1.024 byteMAX_RETURN_DATA
Account info CPI maks128 (255 dengan SIMD-0339)*MAX_CPI_ACCOUNT_INFOS, MAX_CPI_ACCOUNT_INFOS_SIMD_0339
Biaya serialisasi CPI1 CU per 250 bytecpi_bytes_per_unit
Realloc data akun maks per CPI10.240 byte (10 KiB)MAX_PERMITTED_DATA_INCREASE

invoke vs invoke_signed

Solana menyediakan dua fungsi untuk melakukan CPI:

FungsiKasus penggunaanPenandatanganan PDA
invokeCPI di mana semua penandatangan yang diperlukan telah menandatangani transaksi asliTidak
invoke_signedCPI di mana program pemanggil perlu menandatangani atas nama PDA yang dimilikinyaYa, melalui signer seeds

Di balik layar, invoke hanya memanggil invoke_signed dengan array signer seeds kosong. Gunakan invoke ketika Anda tidak memerlukan penandatanganan PDA, dan invoke_signed ketika program harus mengotorisasi tindakan atas nama PDA.

Kedua fungsi pada akhirnya memicu syscall yang sama (sol_invoke_signed_rust) dan mengalir melalui jalur runtime yang sama (cpi_common). Satu-satunya perbedaan adalah apakah signer seeds disediakan. Ketika seeds disediakan, runtime menurunkan pubkey PDA dan menambahkannya ke set penandatangan yang valid sebelum pemeriksaan hak istimewa.

Is this page helpful?

Daftar Isi

Edit Halaman

Dikelola oleh

© 2026 Yayasan Solana.
Semua hak dilindungi.
Terhubung