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 Loaderopen in new window at isinasagawa ng Solana Runtimeopen in new window
  • Ang mga developer ay karaniwang nagsusulat ng mga programa sa Rust o C++, ngunit maaaring pumili ng anumang wika na nagta-target ng LLVMopen in new window ng BPFopen in new window 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 Programopen in new window at Mga Programa ng Solana Program Library (SPL)open in new window.

Ibinibigay ng Native Programs ang base functionality na kinakailangan para magpatakbo ng mga validator. Sa mga programang ito, ang pinakakilala ay ang System Programopen in new window 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 Programopen in new window ay maaaring direktang gamitin sa pamamagitan ng CLI, habang ang iba ay tulad ng Associated Token Account Programopen in new window 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 Labsopen in new window at Solangopen in new window ang EVMopen in new window 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:

FileDescription
lib.rsRegistering modules
entrypoint.rsEntrypoint to the program
instruction.rsProgram API, (de)serializing instruction data
processor.rsProgram logic
state.rsProgram objects, (de)serializing state
error.rsProgram-specific errors

Kamakailan, ang Anchoropen in new window 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 EnvironmentRPC Connection URL
Mainnet-betahttps://api.mainnet-beta.solana.com
Testnethttps://api.testnet.solana.com
Devnethttps://api.devnet.solana.com
LocalhostDefault 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 connectionsopen in new window sa kaukulang cluster.

Deploying Programs

Maaaring i-deploy ng mga developer ang kanilang mga programa sa pamamagitan ng CLIopen in new window:

solana program deploy <PROGRAM_FILEPATH>

Kapag na-deploy ang isang program, iko-compile ito sa isang ELF shared objectopen in new window (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 Loaderopen in new window. 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.

Other Resources

Last Updated:
Contributors: mh