Learn the differences between Ethereum and Solana smart contracts.
Bạn có thể viết và triển khai các chương trình trên blockchain Solana. Chương trình, còn được gọi là hợp đồng thông minh trong các giao thức khác, đóng vai trò là nền tảng cho các hoạt động onchain từ DeFi và NFT đến mạng xã hội và trò chơi.
executable checked account.process_instruction). The following parameters are always included:Unlike most other blockchains, Solana completely separates data and code. All data that programs interact with is stored in separate accounts and is called through instructions.
This model allows for comprehensive single programs to operate through various accounts without the need for additional deployments. A common example of this pattern can be seen between Native and SPL Programs.
Solana có nhiều chương trình đóng vai trò là khối xây dựng cốt lõi cho các tương tác onchain.
Các chương trình này được chia thành Native Programs và Solana Program Library (SPL) Programs.
Native Programs cung cấp chức năng nền tảng cần thiết để vận hành các validator. Một trong những chương trình nổi tiếng nhất trong số này là System Program, chịu trách nhiệm quản lý các tài khoản mới và chuyển SOL giữa hai nhóm.
SPL Programs hỗ trợ nhiều hoạt động onchain khác nhau, bao gồm tạo token, trao đổi, cho vay, tạo stake pool và dịch vụ tên onchain. SPL Token Program có thể được gọi trực tiếp thông qua CLI. Các chương trình khác, như Associated Token Account Program, thường được cấu hình dưới dạng chương trình tùy chỉnh
Programs are typically developed in Rust and C++. However, you can develop in any language targeting LLVM and BPF backend. Recent efforts by Neon Labs and Solang make EVM compatibility possible, allowing developers to write programs in Solidity.
Most Rust-based programs follow the architecture below:
| File | Description |
lib.rs | Registering modules |
entrypoint.rs | Entrypoint to the program |
instruction.rs | Program API, (de)serializing instruction data |
processor.rs | Program logic |
state.rs | Program objects, (de)serializing state |
error.rs | Program-specific errors |
Recently, Anchor has emerged as a framework for developing programs. Anchor reduces boilerplate and simplifies (de)serialization handling, similar to Ruby on Rails but for Rust-based programs. Programs are typically developed and tested in the Localhost and Devnet environments before being deployed to Testnet and Mainnet.
Solana supports the following environments:
| Cluster Environment | RPC Connection URL |
| Mainnet-beta | https://api.mainnet-beta.solana.com |
| Testnet | https://api.testnet.solana.com |
| Devnet | https://api.devnet.solana.com |
| Localhost | Default port: 8899 (e.g., http://localhost:8899) |
Sau khi được triển khai vào một môi trường, các client có thể tương tác với các chương trình onchain thông qua kết nối RPC đến từng cluster.
Developers can deploy programs via the CLI as follows:
solana program deploy <PROGRAM_FILEPATH>
When a program is deployed, it is compiled into an ELF shared object (including BPF bytecode) and uploaded to the Solana cluster. Programs exist inside an account except when they are marked as executable and allocated to the BPF Loader. The account's address is used as the program_id to reference the program in all transactions.
Solana supports multiple BPF Loaders, including the recent Upgradable BPF Loader. BPF Loaders are responsible for managing program accounts and making this possible through the program_id for clients.
All programs have a single entry point where instruction processing occurs (i.e., process_instruction). The parameters always include:
Once called, programs are executed by the Solana Runtime.