Ringkasan
Program yang di-deploy melalui loader-v3 dapat di-upgrade ketika upgrade authority ditetapkan. Mencabut authority membuat program menjadi immutable. Mencakup mekanisme upgrade 9 langkah, semua 9 instruksi loader-v3, verifikasi build, dan 5 jenis loader.
Melakukan deployment program
Native Rust
Deploy menggunakan Solana CLI dengan solana program deploy.
Anchor
Deploy menggunakan framework Anchor dengan anchor deploy.
Melakukan upgrade program
Untuk meng-upgrade program, sebuah akun harus memiliki upgrade authority
(biasanya akun yang awalnya
melakukan deploy program). Selama deployment atau
upgrade, bytecode baru diunggah ke akun buffer sementara, kemudian ditulis ke
programdata account. Menetapkan upgrade authority ke None membuat program
menjadi immutable dan secara permanen mencegah update lebih lanjut.
Mekanisme upgrade
Ketika
UpgradeableLoaderInstruction::Upgrade
diproses, runtime:
- Memverifikasi program account dapat ditulis dan dimiliki oleh loader-v3.
- Memverifikasi buffer account berisi state
Bufferdengan authority yang benar. - Memverifikasi
upgrade_authority_addressprogramdata account cocok dan bukanNone. - Memverifikasi program belum di-deploy dalam slot saat ini
(
clock.slot != slot). - Memuat dan memverifikasi byte ELF baru dari buffer.
- Menyalin bytecode baru dari buffer ke programdata account dan mengosongkan byte yang tersisa.
- Mendanai programdata account hingga rent-exemption.
- Menguras buffer account (mengatur lamports ke 0) dan memotong datanya.
- Versi baru menjadi efektif di slot berikutnya (
deployment_slot + 1).
Akun Program itu sendiri (state-nya dan pointer programdata_address) tidak
berubah selama upgrade. Hanya bytecode akun ProgramData dan metadata slot
yang diperbarui.
Referensi instruksi Loader-v3
Loader-v3 (BPF Loader Upgradeable) adalah loader default saat ini untuk men-deploy program di Solana.
| Instruksi | Deskripsi |
|---|---|
InitializeBuffer | Mengatur state akun buffer menjadi Buffer dengan authority yang ditentukan. Gagal jika sudah diinisialisasi. |
Write | Menulis byte pada offset yang ditentukan dalam akun buffer. Authority harus menandatangani. |
DeployWithMaxDataLen | Membuat program baru: menurunkan alamat ProgramData, membuat akun ProgramData melalui CPI ke System Program, memverifikasi dan men-deploy ELF dari buffer, mengatur state akun Program dan menandainya sebagai executable. |
Upgrade | Mengganti bytecode dalam akun ProgramData program yang sudah ada dari buffer. |
SetAuthority | Mengubah authority akun Buffer atau ProgramData. Mengatur ke None pada ProgramData membuat program menjadi immutable. Authority buffer tidak dapat diatur ke None. |
SetAuthorityChecked | Seperti SetAuthority, tetapi memerlukan authority baru untuk juga menandatangani transaksi. |
Close | Menutup akun buffer, uninitialized, atau ProgramData dengan mentransfer lamport-nya ke penerima. Menutup ProgramData juga menulis tombstone Closed ke cache program. Tidak dapat menutup program yang di-deploy pada slot saat ini. |
ExtendProgramChecked | Memperluas alokasi akun ProgramData dengan byte tambahan, mendanai rent ekstra dari payer. |
Migrate | Memigrasikan program loader-v3 ke loader-v4 dengan mentransfer kepemilikan akun program dan menyalin bytecode. Memerlukan migration authority atau upgrade authority program untuk menandatangani. Loader-v4 belum dirilis di mainnet. |
Memverifikasi program
Solana mendukung verifiable builds, yang memungkinkan pengguna mengonfirmasi bahwa bytecode on-chain program cocok dengan kode sumber publiknya. Framework Anchor menyediakan dukungan bawaan untuk verifiable builds.
Untuk memeriksa status verifikasi program yang telah di-deploy, cari program ID-nya di Solana Explorer, atau gunakan Ellipsis Labs Solana Verifiable Build CLI untuk memverifikasi program on-chain secara independen.
Program loader
| Loader | Alamat | Dapat di-upgrade | Deskripsi |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Hanya melalui upgrade software validator | Memiliki builtins (System, Vote, Stake) dan loader lainnya |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Tidak (manajemen loader dinonaktifkan) | Program legacy |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Tidak (manajemen loader dinonaktifkan) | Program legacy |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Ya, jika upgrade authority diatur | Memiliki semua program yang baru di-deploy |
| Loader-v4 | LoaderV411111111111111111111111111111111111 | Ya, jika authority diatur | Belum dirilis di mainnet |
Is this page helpful?