Tài liệu SolanaPhát triển chương trình

Triển khai các chương trình

Hướng dẫn này giả định bạn đã có kiến thức về các chủ đề sau:

Tác vụLệnh
Build chương trìnhcargo build-sbf
Deploy chương trình mớisolana program deploy <path_to_program.so>
Cập nhật chương trình hiện cósolana program deploy <path_to_program.so> (giống như deploy)
Hiển thị thông tin chương trìnhsolana program show <program-id>
Chuyển quyền chương trìnhsolana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair>
Làm chương trình bất biếnsolana program set-upgrade-authority <program-id> --final
Đóng chương trìnhsolana program close <program-id> --bypass-warning
Kiểm tra số dư vísolana balance
Yêu cầu airdrop (devnet/localhost)solana airdrop 2

Hiện tại đang có quá trình chuyển đổi từ loader-v3 (lệnh phụ program) sang loader-v4 (lệnh phụ program -v4) vì loader-v3 đang bị loại bỏ dần.

Đối với các triển khai mới, vui lòng sử dụng solana program-v4 deploy thay vì solana program deploy.

Để di chuyển một chương trình hiện có (về cơ bản là triển khai lại):

solana program migrate ./target/deploy/your_program-keypair.json

Chuẩn bị

Đầu tiên, chương trình cần được xây dựng (biên dịch, liên kết, loại bỏ thông tin gỡ lỗi).

cargo +solana build --target sbpf-solana-solana --release

Bước này phải được thực hiện trước mỗi lần triển khai hoặc triển khai lại.

Kiểm tra xem tài khoản thanh toán mặc định có đủ tiền tương ứng với kích thước của tệp thực thi hay không:

du -h ./target/deploy/your_program.so
solana balance

Ngoài ra, mỗi chương trình có một tài khoản chương trình và một ID chương trình, đó là địa chỉ của tài khoản chương trình đó. Lệnh sau tạo ra một keypair cho tài khoản chương trình:

solana-keygen new -o ./target/deploy/your_program-keypair.json
Terminal
$
solana-keygen new

Lệnh này tạo một keypair tại ~/.config/solana/id.json theo mặc định.

cargo-build-sbf

Triển khai ban đầu

Bây giờ tệp thực thi có thể được tải lên tài khoản chương trình:

Chọn Solana cluster nào để deploy. Sử dụng lệnh solana config get để kiểm tra cấu hình hiện tại của bạn:

Terminal
$
solana config get
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Terminal
$
solana config set --url mainnet-beta
$
solana config set --url devnet
$
solana config set --url localhost
$
solana config set --url testnet
$
solana config set --url "https://your-rpc-url.com"
solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json

Triển khai lại

Tải lên một tệp thực thi khác vào cùng một program account sẽ ghi đè / thay thế nó. Tuy nhiên, đối với việc triển khai lại, chỉ cần program ID (pubkey của program keypair), không cần toàn bộ keypair, vì người ký là keypair của quyền nâng cấp.

Loader-v3

Đối với devnet hoặc localhost, nạp tiền vào ví của bạn bằng lệnh solana airdrop:

Terminal
$
solana airdrop 2

Nếu tệp thực thi cũ ngắn hơn tệp mới, có thể cần phải mở rộng programdata account trước:

Terminal
$
solana balance

Loader-v4

Lưu ý rằng việc triển khai ban đầu sử dụng program-keypair, trong khi triển khai lại sử dụng program-id thay thế:

solana program-v4 deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json

Ưu tiên tải lên

Để build một chương trình, sử dụng lệnh cargo build-sbf:

Terminal
$
cargo build-sbf

Tiếp tục một quá trình tải lên

Có thể xảy ra trường hợp quá trình tải lên bị treo hoặc bị hủy bỏ.

Loader-v3

Nếu việc triển khai chương trình thất bại, sẽ có một tài khoản bộ đệm trung gian bị treo chứa số dư khác không. Để lấy lại số dư đó, bạn có thể tiếp tục quá trình triển khai đã thất bại bằng cách cung cấp cùng một bộ đệm trung gian cho lệnh gọi mới đến deploy.

Để khôi phục keypair:

Build chương trình của bạn bằng lệnh cargo build-sbf:

Terminal
$
cargo build-sbf

Lệnh này tạo ra hai tệp quan trọng trong target/deploy/:

  1. hello_world-keypair.json: Một tệp keypair có public key sẽ được sử dụng làm Program ID của bạn
  2. hello_world.so: Tệp thực thi chương trình đã được biên dịch
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --start-offset <BYTES_UPLOADED_SO_FAR>

Hoàn thiện

Đây là một hành động không thể đảo ngược.

Một chương trình có thể được làm cho bất biến bằng cách loại bỏ quyền nâng cấp của nó.

Terminal
$
wc -c < ./target/deploy/hello_world.so
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --final
Terminal
$
solana rent 18504
solana program finalize --program-id ./target/deploy/your_program-keypair.json

Thay vì ghi đè các chương trình, cũng có thể cung cấp cho người dùng lựa chọn phiên bản chương trình họ muốn sử dụng bằng cách xây dựng một danh sách liên kết các chương trình đã hoàn thiện:

Sử dụng lệnh solana program deploy để deploy chương trình của bạn:

Terminal
$
solana program deploy ./target/deploy/hello_world.so

Đối với các chương trình được triển khai dưới loader-v3, chỉ có tài khoản programdata, các tài khoản bộ đệm và tiền bị khóa trong những tài khoản đó có thể được lấy lại. Tài khoản program cùng với program ID và tiền bị khóa cụ thể trong tài khoản program sẽ bị mắc kẹt.

Các chương trình được triển khai dưới loader-v4 có thể được đóng cùng với tài khoản chương trình, program ID và các khoản tiền bị khóa của chúng sẽ trở nên khả dụng cho các mục đích khác một lần nữa.

Loader-v3

Terminal
$
solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json

Bạn có thể tạo keypair mới bằng lệnh solana-keygen:

Terminal
$
solana-keygen new -o ./custom-keypair.json
solana program close ./target/deploy/your_program-keypair.json

Để đóng tất cả các tài khoản buffer liên kết với quyền hiện tại:

Cập nhật chương trình của bạn bằng cách sử dụng cùng lệnh solana program deploy:

  1. Thực hiện thay đổi mã chương trình của bạn
  2. Xây dựng lại chương trình của bạn: cargo build-sbf
  3. Triển khai bản cập nhật:
Terminal
$
solana program deploy ./target/deploy/hello_world.so

Kiểm tra Metadata

Lệnh phụ show liệt kê metadata của một chương trình.

Một ví dụ về kết quả đầu ra:

Terminal
$
solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
  • Program Id là địa chỉ có thể được tham chiếu trong trường program_id của một lệnh khi gọi một chương trình.
  • Owner: Loader mà chương trình này được triển khai.
  • ProgramData Address là tài khoản programdata liên kết với tài khoản chương trình chứa phần thực thi của chương trình (chỉ áp dụng cho loader-v3).
  • Status: retracted, deployed hoặc finalized (chỉ áp dụng cho loader-v4).
  • Authority là quyền nâng cấp của chương trình.
  • Last Deployed In Slot là slot mà chương trình được triển khai lần cuối.
  • Data Length là kích thước của không gian dành riêng cho việc triển khai. Không gian thực tế được sử dụng bởi chương trình hiện đang triển khai có thể ít hơn.

Loader-v3

Để xem một chương trình cụ thể:

solana program show ./target/deploy/your_program-keypair.json

Để kiểm tra metadata chương trình của bạn, sử dụng lệnh solana program show:

Terminal
$
solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE

Để hiển thị tất cả các tài khoản buffer bất kể quyền là gì:

solana program show --buffers --all
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7c
Authority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1
Last Deployed In Slot: 6573
Data Length: 18504 (0x4848) bytes
Balance: 0.12999192 SOL
solana program show --programs --buffer-authority ~/.config/solana/authority-keypair.json
solana program show --buffers --buffer-authority ~/.config/solana/authority-keypair.json

Loader-v4

Để xem một chương trình cụ thể:

solana program-v4 show --program-id ./target/deploy/your_program-keypair.json

Để xem danh sách các chương trình được triển khai với quyền mặc định:

solana program-v4 show --all

Để xem danh sách các chương trình được triển khai với một quyền cụ thể:

solana program-v4 show --authority ~/.config/solana/authority-keypair.json

Tải xuống tệp thực thi

Đôi khi việc tải xuống và so sánh một chương trình rất hữu ích để đảm bảo nó chứa một tệp thực thi đã biết. Tệp đã tải xuống có thể được cắt ngắn, băm và so sánh với mã băm của tệp chương trình gốc.

Loader-v3

solana program dump ./target/deploy/your_program-keypair.json ./target/deploy/your_program.so

Loader-v4

solana program download ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json

Nâng cao: Chuyển giao quyền

Quyền thay đổi một chương trình thuộc về người có quyền của nó. Quyền này có thể được chuyển giao cho một keypair khác mà không thay đổi keypair của chương trình, để ID chương trình vẫn giữ nguyên. Hơn nữa, một quyền duy nhất có thể kiểm soát nhiều program account.

Để chuyển quyền quản lý chương trình sang một tài khoản khác, sử dụng lệnh solana program set-upgrade-authority:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json

Đầu tiên, một keypair cho quyền phải được tạo:

solana-keygen new -o ~/.config/solana/authority-keypair.json

Để làm cho chương trình của bạn trở nên bất biến, sử dụng lệnh solana program set-upgrade-authority với cờ --final để xóa quyền quản lý chương trình:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
solana program deploy ./target/deploy/your_program.so --upgrade-authority ~/.config/solana/authority-keypair.json

Hoặc sau khi triển khai và sử dụng keypair mặc định làm quyền hiện tại:

Để đóng chương trình của bạn và thu hồi SOL được phân bổ cho program account, sử dụng lệnh solana program close:

Terminal
$
solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --upgrade-authority ~/.config/solana/authority-keypair.json --new-upgrade-authority ~/.config/solana/new_authority-keypair.json

Loader-v4

Thẩm quyền có thể được chỉ định trong quá trình triển khai:

solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json --authority ~/.config/solana/authority-keypair.json
Terminal
$
solana program show --programs
solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --new-authority ~/.config/solana/authority-keypair.json
Program Id | Slot | Authority | Balance
-------------------------------------------------|------------|------------------------------------------------|-------------
7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.12999192
3KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328
solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --authority ~/.config/solana/authority-keypair.json --new-authority ~/.config/solana/new_authority-keypair.json

Để tải xuống một chương trình đã triển khai, sử dụng lệnh solana program dump:

Terminal
$
solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so

Hãy lưu ý rằng việc sử dụng tài khoản buffer gần như làm tăng gấp đôi số tiền cần thiết trong quá trình tải lên vì hai tài khoản đang chứa một tệp thực thi mỗi tài khoản, cùng một lúc.

Đầu tiên, một keypair cho tài khoản buffer phải được tạo:

solana-keygen new -o ~/.config/solana/buffer-keypair.json

Tài khoản buffer có thể được tái sử dụng cho các lần tải lên khác nhau và không bị ràng buộc với bất kỳ program account cụ thể nào.

Terminal
$
solana program deploy ./target/deploy/hello_world.so \
--with-compute-unit-price 10000 \
--max-sign-attempts 10 \
--use-rpc
solana program write-buffer ./target/deploy/your_program.so --buffer ~/.config/solana/buffer-keypair.json
solana program deploy --program-id ./target/deploy/your_program-keypair.json --buffer ~/.config/solana/buffer-keypair.json
  • --with-compute-unit-price: Đặt phí ưu tiên tính theo micro-lamport (0.000001 SOL) cho mỗi đơn vị tính toán. Kiểm tra Helius Priority Fee API để biết mức phí hiện tại. Phí ưu tiên là khoản phí bổ sung được trả cho leader hiện tại để ưu tiên giao dịch của bạn.
  • --max-sign-attempts: Số lần thử lại với blockhash mới nếu giao dịch hết hạn. (Mặc định: 5)
  • --use-rpc: Gửi giao dịch đến RPC đã cấu hình. Cờ này yêu cầu kết nối RPC có trọng số cổ phần từ các nhà cung cấp như Triton hoặc Helius.

Is this page helpful?

Quản lý bởi

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