Hướng dẫn này giả định bạn đã có kiến thức về các chủ đề sau:
- Mô hình tài khoản Solana
- Tổng quan về các chương trình Solana
- Phát triển các chương trình Solana tùy chỉnh
| Tác vụ | Lệnh |
|---|---|
| Build chương trình | cargo build-sbf |
| Deploy chương trình mới | solana 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ình | solana program show <program-id> |
| Chuyển quyền chương trình | solana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair> |
| Làm chương trình bất biến | solana program set-upgrade-authority <program-id> --final |
| Đóng chương trình | solana 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.sosolana 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
$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:
$solana config get
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
$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:
$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:
$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:
$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:
$cargo build-sbf
Lệnh này tạo ra hai tệp quan trọng trong target/deploy/:
hello_world-keypair.json: Một tệp keypair có public key sẽ được sử dụng làm Program ID của bạnhello_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ó.
$wc -c < ./target/deploy/hello_world.so
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --final
$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:
$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
$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:
$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:
- Thực hiện thay đổi mã chương trình của bạn
- Xây dựng lại chương trình của bạn:
cargo build-sbf - Triển khai bản cập nhật:
$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:
$solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
Program Idlà địa chỉ có thể được tham chiếu trong trườngprogram_idcủ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 Addresslà 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,deployedhoặcfinalized(chỉ áp dụng cho loader-v4).Authoritylà quyền nâng cấp của chương trình.Last Deployed In Slotlà slot mà chương trình được triển khai lần cuối.Data Lengthlà 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:
$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 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Owner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7cAuthority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1Last Deployed In Slot: 6573Data Length: 18504 (0x4848) bytesBalance: 0.12999192 SOL
solana program show --programs --buffer-authority ~/.config/solana/authority-keypair.jsonsolana 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:
$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:
$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:
$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
$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.129991923KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 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:
$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.
$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.jsonsolana 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?