Program

Bất kỳ lập trình viên nào đều có thể viết và triển khai một chương trình trên Solana. Program (hay được biết đến với tên gọi là Smart Contract trên các blockchain khác) sẽ là nền tảng cho các hoạt động on-chain; thứ giúp tạo nên đa số các hình thái từ DeFi, NFTs cho đến Mạng xã hội và Trò chơi.

Có thể bạn chưa biết

Những điều có thể bạn chưa biết

  • Program sẽ xử lý các instruction từ người dùng và các Program khác
  • Tất cả các Program đều là stateless: mọi dữ liệu mà Program tương tác đều được lưu trên những Account tách biệt và được lan truyền thông qua các instruction
  • Bản thân Program được lưu bên trong những Account được đánh dấu là executable
  • Tất cả Program được sở hữu bởi BPF Loaderopen in new window và được thực thi bởi Solana Runtimeopen in new window
  • Hầu hết các lập trình viên đều phát triển Program bằng Rust hoặc C++, nhưng bạn vẫn có thể lựa chọn bất kỳ ngôn ngữ lập trình mà có hỗ trợ BPFopen in new window của LLVMopen in new window
  • Mọi Program chỉ có duy nhất một điểm truy cập, nơi mà các instruction được xử lý (cụ thể là process_instruction); các tham số đầu vào luôn bao gồm:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

Chi tiết

Không giống như hấu hết các blockchain khác, Solana tách bạch giữa code và dữ liệu. Tất cả dữ liệu mà chương trình cần tương tác sẽ được lưu ở các Account tách biệt và được lan truyền thông dưới dạng tham chiếu thông qua các instruction. Mô hình này cho phép một chương trình chung có thể hoạt động trên nhiều kiểu Account khác nhau mà không cần tái cơ cấu lại chương trình. Một ví dụ hay gặp của mô hình này là Native Programs và SPL Programs.

Native Programs & Solana Program Library (SPL) Programs

Solana được trang bị sẵn một số Program nền tảng và được dùng để xây dựng các tương tác on-chain. Những Program này thường được chia thành Native Programsopen in new windowSolana Program Library (SPL) Programsopen in new window.

Native Programs cung cấp các chức năng cơ sở và cần thiết để vận hành các validators. Trong các Program này, chương trình được biết đến rộng rãi nhất là System Programopen in new window. System Program chịu trách nhiệm cho việc cấp phát Account mới, cũng như chuyển SOL giữa các Account khác nhau.

SPL Programs hỗ trợ một số các hoạt động on-chain bao gồm tạo tokens, trao đổi tokens, cho vay tokens, cũng như tạo stake pools, và duy trì name service. SPL Token Programopen in new window có thể được gọi trực tiếp thông qua Solana CLI, hoặc bằng cách khác hơn như là Associated Token Account Programopen in new window. Associated Token Account Program thường được kết hợp với các chương trình tuỳ chỉnh để gọi đến SPL Token Program hơn là gọi độc lập.

Viết một Program

Program hầu như được phát triển dựa trên Rust hoặc C++. Tuy nhiên bạn vẫn có thể phát triển bằng bất kỳ ngôn ngữ nào miễn là hỗ trợ BPF của LLVM. Hiện tại, lập trình viên cũng có thể chuyển đổi smart contract trên EVM được viết bằng Solidity thông qua dự án được khởi xướng bởi Neon Labsopen in new windowSolangopen in new window.

Đa số các Program dự trên Rust đều bám sát kiến trúc sau:

TệpMô tả
lib.rsĐăng ký các modules
entrypoint.rsĐiểm truy cập của Program
instruction.rsProgram API, tuần tự và phi tuần tự hoá dữ liệu đầu vào
processor.rsLogic của Program
state.rsCác đối tượng của Program, tuần tự và phi tuần tự hoá trạng thái
error.rsĐịnh nghĩa lỗi của Program

Hiện tại, Anchoropen in new window đang nổi lên như là một framework phổ biến giúp phát triển Program nhanh chóng hơn. Anchor được lấy cảm hứng nhiều từ Ruby on Rails nhằm giảm thiểu các mẫu code lặp lại, đồng thời chuẩn hoá việc tuần tự và phi tuần tự hoá dữ liệu trong quá trình phát triển bằng Rust.

Program thường được phát triển và kiểm thử trên môi trường localhost và devnet trước khi được triển khai trên testnet hoặc mainnet. Solana hỗ trợ các môi trường sau:

Cụm môi trườngĐường dẫn kết nối RPC
Mainnet-betahttps://api.mainnet-beta.solana.com
Testnethttps://api.testnet.solana.com
Devnethttps://api.devnet.solana.com
LocalhostPort mặc định: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

Sau khi triển khai lên một môi trường cụ thể, người dùng có thể tương tác với các Program trên on-chain thông qua kết nối RPCopen in new window tương ứng.

Triển khai Program

Lập trình viên có thể triển khai Program của họ thông qua CLIopen in new window:

solana program deploy <PROGRAM_FILEPATH>

Khi một Program được triển khai, nó sẽ được biên dịch thành một ELF shared objectopen in new window (có chứa BPF bytecode) và được tải lên mạng Solana. Program được lưu trữ trong Account (giống như hấu hết mọi thứ trên Solana), ngoại trừ việc được đánh dấu là executableowner được gán cho BPF Loader. Địa chỉ của Account này sẽ được gọi là program_id và được sử dụng nhưng là tham chiếu cho Program trong các giao dịch ở tương lai.

Solana hỗ trợ đa dạng các BPF Loader với phiên bản mới nhất là Upgradable BPF Loaderopen in new window. BPF Loader chịu trách nhiệm cho việc điều hành các Account của Program và cho phép người dùng tương tác bằng program_id. Tất cả Program chỉ có một điểm truy cập duy nhất, nơi mà các instruction sẽ được ghi nhận và xử lý (cụ thể là process_instruction) với các tham số bao gồm:

  • program_id: pubkey
  • accounts: array,
  • instruction_data: byte array

Mỗi khi được gọi, Program sẽ được thực thi bởi Solana Runtime.

Các nguồn tài liệu khác

Last Updated:
Contributors: Trần Minh Quang, tuphan-dn