Programs
Ang sinumang developer ay maaaring magsulat at mag-deploy ng mga programa sa Solana blockchain. Ang mga programa (kilala bilang mga matalinong kontrata sa iba pang mga protocol) ay nagsisilbing pundasyon para sa on-chain na aktibidad, na nagpapagana ng anuman mula sa DeFi at NFT hanggang sa Social Media at Gaming.
Facts
Fact Sheet
- Pinoproseso ng mga program ang mga transaksyon mula sa parehong mga end user at iba pang mga program
- Ang lahat ng mga programa ay stateless: anumang data na nakipag-ugnayan sa kanila ay nakaimbak sa magkahiwalay na accounts na ipinapasa sa pamamagitan ng mga instructions
- Ang mga program mismo ay nakaimbak sa mga account na minarkahan bilang
mapapatupad
- Lahat ng mga programa ay pagmamay-ari ng BPF Loader at isinasagawa ng Solana Runtime
- Ang mga developer ay karaniwang nagsusulat ng mga programa sa Rust o C++, ngunit maaaring pumili ng anumang wika na nagta-target ng LLVM ng BPF backend
- Lahat ng mga programa ay may iisang entry point kung saan nagaganap ang pagpoproseso ng pagtuturo (i.e.
process_instruction
); palaging kasama sa mga parameter ang:program_id
:pubkey
account
:array
,instruction_data
:byte array
Deep Dive
Hindi tulad ng karamihan sa iba pang mga blockchain, ganap na pinaghihiwalay ng Solana ang code mula sa data. Ang lahat ng data kung saan nakikipag-ugnayan ang mga programa ay iniimbak sa magkahiwalay na mga account at ipinapasa bilang mga sanggunian sa pamamagitan ng mga instruction. Ang modelong ito ay nagbibigay-daan para sa isang generic na programa na gumana sa iba't ibang mga account nang hindi nangangailangan ng mga karagdagang deployment. Ang mga karaniwang halimbawa ng pattern na ito ay makikita sa buong Native at SPL Programs.
Native Programs & The Solana Program Library (SPL)
Ang Solana ay nilagyan ng ilang mga programa na nagsisilbing pangunahing mga bloke para sa mga on-chain na pakikipag-ugnayan. Ang mga programang ito ay nahahati sa Mga Native na Program at Mga Programa ng Solana Program Library (SPL).
Ibinibigay ng Native Programs ang base functionality na kinakailangan para magpatakbo ng mga validator. Sa mga programang ito, ang pinakakilala ay ang System Program na responsable sa pangangasiwa ng mga bagong account at paglilipat ng SOL sa pagitan ng dalawang partido .
Sinusuportahan ng SPL Programs ang ilang mga on-chain na aktibidad, kabilang ang paggawa, pagpapalit, at pagpapahiram ng mga token, pati na rin ang pagbuo ng mga stake pool at pagpapanatili ng on-chain name service. Ang SPL Token Program ay maaaring direktang gamitin sa pamamagitan ng CLI, habang ang iba ay tulad ng Associated Token Account Program ay karaniwang binubuo ng mga pasadyang programa.
Writing Programs
Ang mga programa ay pinakakaraniwang binuo gamit ang Rust o C++, ngunit maaaring mabuo sa anumang wika na nagta-target sa backend ng BPF ng LLVM. Pinapagana ng mga kamakailang inisyatiba ng Neon Labs at Solang ang EVM compatibility at payagan ang mga developer na magsulat ng mga program sa Solidity.
Karamihan sa mga programang nakabatay sa kalawang ay sumusunod sa sumusunod na arkitektura:
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 |
Kamakailan, ang Anchor ay lumitaw bilang isang sikat na framework para sa pagbuo ng mga programa. Ang Anchor ay isang opinionated framework, na katulad ng Ruby on Rails, na binabawasan ang boilerplate at pinapa-streamline ang (de)serialization na proseso para sa Rust-based na development.
Karaniwang binuo at sinusubok ang mga programa laban sa mga environment ng Localhost at Devnet bago i-deploy sa Testnet o Mainnet. Sinusuportahan ng Solana ang mga sumusunod na environment:
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, http://192.168.1.88:8899) |
Kapag na-deploy na sa isang environment, maaaring makipag-ugnayan ang mga kliyente sa mga on-chain na program sa pamamagitan ng RPC connections sa kaukulang cluster.
Deploying Programs
Maaaring i-deploy ng mga developer ang kanilang mga programa sa pamamagitan ng CLI:
solana program deploy <PROGRAM_FILEPATH>
Kapag na-deploy ang isang program, iko-compile ito sa isang ELF shared object (containing BPF bytecode) at ia-upload sa Solana cluster. Ang mga programa ay nakatira sa mga account (katulad ng lahat ng iba pa sa Solana), maliban sa mga account na ito ay minarkahan bilang executable
at itinalaga sa BPF Loader. Ang address ng account na ito ay tinutukoy bilang program_id
at ginagamit upang i-reference ang program sa lahat ng mga transaksyon sa hinaharap.
Sinusuportahan ng Solana ang maraming BPF Loader, na ang pinakabago ay ang Upgradable BPF Loader. Ang BPF Loader ay may pananagutan sa pangangasiwa sa account ng programa at gawin itong available sa mga kliyente sa pamamagitan ng program_id
. Ang lahat ng mga programa ay may iisang entry point kung saan nagaganap ang pagpoproseso ng pagtuturo (ibig sabihin, process_instruction
) at palaging kasama sa mga parameter ang:
program_id
:pubkey
account
:array
,instruction_data
:byte array
Kapag na-invoke, ang mga programa ay isinasagawa ng Solana Runtime.