Learn the differences between Ethereum and Solana smart contracts.
您可以在 Solana 区块链上编写和部署程序。程序在其他协议中也被称为智能合约,是链上活动的基础,涵盖从 DeFi 和 NFT 到社交媒体和游戏的各个领域。
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 有许多程序作为链上交互的核心构建模块。
这些程序分为原生程序和 Solana 程序库(SPL)程序。
原生程序提供运行验证节点所需的基础功能。其中最知名的程序之一是 System Program,负责管理新账户和在两个组之间转移 SOL。
SPL 程序支持各种链上活动,包括代币创建、交易、借贷、质押池生成和链上域名服务。SPL Token Program 可以直接通过 CLI 调用。其他程序,如 Associated Token Program,通常被配置为自定义程序
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) |
一旦部署到某个环境中,客户端可以通过与各个集群的 RPC 连接与链上程序进行交互。
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.