Triển khai chương trình

Tóm tắt

Các chương trình được triển khai qua loader-v3 có thể được nâng cấp khi có quyền nâng cấp được thiết lập. Thu hồi quyền này sẽ khiến chương trình trở nên bất biến. Bao gồm cơ chế nâng cấp 9 bước, tất cả 9 lệnh loader-v3, xác minh bản build và 5 loại loader.

Triển khai chương trình

Nâng cấp chương trình

Để nâng cấp một chương trình, một tài khoản phải nắm giữ quyền nâng cấp (thường là tài khoản đã triển khai chương trình ban đầu). Trong quá trình triển khai hoặc nâng cấp, bytecode mới được tải lên một buffer account tạm thời, sau đó được ghi vào programdata account. Đặt quyền nâng cấp thành None sẽ khiến chương trình trở nên bất biến và ngăn chặn vĩnh viễn các cập nhật tiếp theo.

Cơ chế nâng cấp

Khi UpgradeableLoaderInstruction::Upgrade được xử lý, runtime sẽ:

  1. Xác minh program account có thể ghi và thuộc sở hữu của loader-v3.
  2. Xác minh buffer account chứa trạng thái Buffer với quyền chính xác.
  3. Xác minh upgrade_authority_address của programdata account khớp và không phải None.
  4. Xác minh chương trình chưa được triển khai trong slot hiện tại (clock.slot != slot).
  5. Tải và xác minh các byte ELF mới từ buffer.
  6. Sao chép bytecode mới từ buffer vào programdata account và đặt các byte còn lại về 0.
  7. Cấp vốn cho programdata account để miễn phí thuê.
  8. Rút cạn buffer account (đặt lamports về 0) và cắt bớt dữ liệu của nó.
  9. Phiên bản mới có hiệu lực trong slot tiếp theo (deployment_slot + 1).

Bản thân tài khoản Program (trạng thái và con trỏ programdata_address của nó) không thay đổi trong quá trình nâng cấp. Chỉ có bytecode và metadata slot của tài khoản ProgramData được cập nhật.

Tham chiếu lệnh Loader-v3

Loader-v3 (BPF Loader Upgradeable) là trình tải mặc định hiện tại để triển khai program trên Solana.

LệnhMô tả
InitializeBufferĐặt trạng thái của tài khoản buffer thành Buffer với quyền được chỉ định. Thất bại nếu đã được khởi tạo.
WriteGhi các byte tại vị trí được chỉ định trong tài khoản buffer. Quyền phải ký.
DeployWithMaxDataLenTạo program mới: suy ra địa chỉ ProgramData, tạo tài khoản ProgramData thông qua CPI đến System Program, xác minh và triển khai ELF từ buffer, đặt trạng thái của tài khoản Program và đánh dấu nó có thể thực thi.
UpgradeThay thế bytecode trong tài khoản ProgramData của program hiện có từ buffer.
SetAuthorityThay đổi quyền của tài khoản Buffer hoặc ProgramData. Đặt thành None trên ProgramData làm cho program không thể thay đổi. Quyền của Buffer không thể được đặt thành None.
SetAuthorityCheckedGiống như SetAuthority, nhưng yêu cầu quyền mới cũng phải ký giao dịch.
CloseĐóng tài khoản buffer, chưa khởi tạo hoặc ProgramData bằng cách chuyển lamport của nó cho người nhận. Đóng ProgramData cũng ghi tombstone Closed vào bộ nhớ cache program. Không thể đóng program đã được triển khai trong slot hiện tại.
ExtendProgramCheckedMở rộng phân bổ của tài khoản ProgramData thêm các byte bổ sung, tài trợ rent thêm từ người trả tiền.
MigrateDi chuyển program loader-v3 sang loader-v4 bằng cách chuyển quyền sở hữu tài khoản program và sao chép bytecode. Yêu cầu quyền di chuyển hoặc quyền nâng cấp của program phải ký. Loader-v4 chưa được phát hành trên mainnet.

Xác minh chương trình

Solana hỗ trợ bản dựng có thể xác minh, cho phép người dùng xác nhận rằng bytecode trên chuỗi của chương trình khớp với mã nguồn công khai của nó. Framework Anchor cung cấp hỗ trợ tích hợp cho các bản dựng có thể xác minh.

Để kiểm tra trạng thái xác minh cho một chương trình đã triển khai, tìm kiếm program ID của nó trên Solana Explorer, hoặc sử dụng Ellipsis Labs Solana Verifiable Build CLI để xác minh độc lập các chương trình trên chuỗi.

Chương trình loader

LoaderĐịa chỉCó thể nâng cấpMô tả
Native LoaderNativeLoader1111111111111111111111111111111Chỉ thông qua nâng cấp phần mềm validatorSở hữu các builtin (System, Vote, Stake) và các loader khác
BPF Loader (v1)BPFLoader1111111111111111111111111111111111Không (quản lý loader đã bị vô hiệu hóa)Chương trình cũ
BPF Loader (v2)BPFLoader2111111111111111111111111111111111Không (quản lý loader đã bị vô hiệu hóa)Chương trình cũ
BPF Loader UpgradeableBPFLoaderUpgradeab1e11111111111111111111111Có, nếu upgrade authority được thiết lậpSở hữu tất cả các chương trình mới triển khai
Loader-v4LoaderV411111111111111111111111111111111111Có, nếu authority được thiết lậpChưa được phát hành trên mainnet

Is this page helpful?

Mục lục

Chỉnh sửa trang

Quản lý bởi

© 2026 Solana Foundation.
Đã đăng ký bản quyền.
Kết nối