यह एक Solana hello world ट्यूटोरियल है। हम आपको Solana इंस्टॉल करने के चरणों और उत्पन्न होने वाली समस्याओं को ट्रबलशूट (troubleshoot) करने के तरीके के बारे में बताएंगे।
यदि आपको कोई समस्या आती है, तो कृपया इस लेख के अंत में ट्रबलशूटिंग (Troubleshooting) सेक्शन देखें।
इंस्टॉलेशन के चरण
Rust इंस्टॉल करें
यदि आपने पहले से ही Rust इंस्टॉल कर रखा है तो इसे छोड़ दें।
# install rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Yarn इंस्टॉल करें
यूनिट टेस्ट चलाने के लिए आपको इसकी आवश्यकता होगी। यदि आपने पहले से ही yarn इंस्टॉल कर रखा है तो इसे छोड़ दें।
# install yarn -- assumes node js is installed
corepack enable # corepack comes with node js
Solana cli और Anchor इंस्टॉल करें
# install solana
curl --proto '=https' --tlsv1.2 -sSfL https://solana-install.solana.workers.dev | bash
Anchor इंस्टॉल करें
Anchor, Solana डेवलपमेंट के लिए एक फ्रेमवर्क है। यह कई मायनों में hardhat के काफी समान है।
# install anchor
cargo install --git https://github.com/solana-foundation/anchor avm --force
avm install latest
avm use latest
इंस्टॉलेशन की टेस्टिंग
एक Anchor Program को इनिशियलाइज़ और बिल्ड करें (hello world के लिए)
Mac यूज़र्स: हम आपके प्रोग्राम को day1 के बजाय day_1 नाम देने की सलाह देते हैं क्योंकि Anchor कभी-कभी Mac मशीनों पर चुपचाप अंडरस्कोर (underscores) डाल देता है।
anchor init day1 # use day_1 if you have a mac
cd day1
anchor build
आपकी मशीन और इंटरनेट कनेक्शन के आधार पर, इस चरण में कुछ समय लग सकता है। यहीं पर आपको इंस्टॉलेशन से जुड़ी समस्याओं का सामना करने की सबसे अधिक संभावना है, इसलिए यदि आवश्यक हो तो कृपया ट्रबलशूटिंग सेक्शन देखें।
लोकलहोस्ट (localhost) पर चलने के लिए Solana को कॉन्फ़िगर करें
# shell 1
solana config set --url localhost
टेस्ट वैलिडेटर नोड (test validator node) चलाएं
एक नए शेल में निम्नलिखित कमांड चलाएं, न कि Anchor प्रोजेक्ट में। लेकिन उस शेल को बंद न करें जहां आपने anchor build चलाया था। यह आपकी मशीन पर एक लोकल (टेस्ट) Solana नोड इंस्टेंस चला रहा है:
# shell 2
solana-test-validator
सुनिश्चित करें कि program_id, Anchor कुंजी (key) के साथ सिंक (sync) है
Anchor प्रोजेक्ट वाले शेल में वापस जाएं और निम्नलिखित कमांड चलाएं:
# shell 1
anchor keys sync
टेस्ट चलाएं
इसे Anchor प्रोजेक्ट में चलाएं
# shell 1
anchor test --skip-local-validator
ऊपर दिया गया कमांड हमारे प्रोग्राम के लिए टेस्ट चलाता है। यदि आपने पहले से कोई टेस्ट वॉलेट नहीं बनाया है, तो Anchor आपको ऐसा करने के निर्देश देगा। हम यहां वे निर्देश नहीं दे रहे हैं क्योंकि यह आपके OS और फ़ाइल स्ट्रक्चर पर निर्भर करेगा। टर्मिनल में solana airdrop 100 {YOUR_WALLET_ADDRESS} चलाकर आपको खुद को कुछ लोकल Sol एयरड्रॉप करने की भी आवश्यकता हो सकती है। आप कमांड लाइन में solana address चलाकर अपना वॉलेट एड्रेस प्राप्त कर सकते हैं।
अपेक्षित आउटपुट इस प्रकार है:

Hello World
अब चलिए अपने प्रोग्राम से “Hello, world!” का आउटपुट प्राप्त करते हैं। programs/day_1/src/lib.rs में ****NEW LINE HERE**** से चिह्नित निम्नलिखित लाइन जोड़ें।
use anchor_lang::prelude::*;
declare_id!("...");
#[program]
pub mod day_1 {
use super::*;
pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
msg!("Hello, world!"); // **** NEW LINE HERE ****
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize {}
फिर से टेस्ट चलाने से पहले, लोकल वैलिडेटर प्रोसेस को बंद (kill) करें और इसे इसके साथ रीस्टार्ट करें:
solana-test-validator --reset
टेस्ट को फिर से चलाएं
anchor test --skip-local-validator
इसे चलाकर लॉग (log) फ़ाइल ढूंढें
ls .anchor/program-logs/
लॉग किए गए “Hello world” को देखने के लिए उस फ़ाइल को खोलें

रियलटाइम Solana लॉग्स
इसके अलावा, आप एक तीसरा शेल खोलकर और निम्नलिखित कमांड चलाकर लॉग्स को लाइव देख सकते हैं:
# shell 3
solana logs
अब टेस्ट को फिर से चलाएं, और आपको उसी टर्मिनल में वही संदेश दिखाई देना चाहिए जहां आपने solana logs चलाया था।
प्रश्न और उत्तर (Questions and Answers)
declare_id! और msg! के बाद एक्सक्लेमेशन पॉइंट (exclamation point) क्यों होते हैं?
Rust में, एक्सक्लेमेशन पॉइंट यह दर्शाता है कि ये मैक्रोज़ (macros) हैं। हम एक बाद के ट्यूटोरियल में मैक्रोज़ पर फिर से चर्चा करेंगे।
क्या मुझे initialize फ़ंक्शन की आवश्यकता है?
नहीं, वह Anchor फ्रेमवर्क द्वारा ऑटो-जनरेट (autogenerated) किया गया था। आप इसे जो चाहें नाम दे सकते हैं।
इस संदर्भ में initialize नाम में कुछ भी खास नहीं है, और इसलिए हम नाम को अपनी पसंद के अनुसार कुछ भी बदल सकते हैं। यह कुछ अन्य कीवर्ड और भाषाओं के विपरीत है, जैसे कुछ भाषाओं में main एक विशेष नाम है, या Solidity में constructor एक विशेष नाम है।
अभ्यास (Exercise): programs/day_1/src/lib.rs में initialize और tests/day_1.ts में initialize का नाम बदलकर initialize2 करने का प्रयास करें और टेस्ट को फिर से चलाएं। नीचे नारंगी घेरों (orange circles) में चिह्नित परिवर्तन देखें।

हम --skip-local-validator के साथ टेस्ट क्यों चलाते हैं?
जब टेस्ट किसी नोड (node) के विरुद्ध चलते हैं, तो हम स्टेट चेंज (state changes) के लिए नोड से क्वेरी (query) कर सकेंगे। यदि आप नोड को चलाने में सक्षम नहीं हैं, तो --skip-local-validator फ्लैग के बिना anchor test चलाना ठीक है। हालाँकि, आपको डेवलपमेंट और टेस्टिंग में कठिनाई होगी, इसलिए हम लोकल वैलिडेटर को चालू करने की सलाह देते हैं।
ट्रबलशूटिंग (Troubleshooting)
Solana एक तेज़ी से विकसित होने वाला सॉफ़्टवेयर है, और आपको इंस्टॉलेशन में समस्याओं का सामना करना पड़ सकता है। हमने अगले सेक्शन में उन समस्याओं का दस्तावेज़ीकरण किया है जिनका सामना करने की सबसे अधिक संभावना है।
हमारी ट्यूटोरियल सीरीज़ निम्नलिखित संस्करणों (versions) के साथ लिखी गई थी:
- Anchor = version 0.29.0
- Solana = version 1.16.25
- Rustc = 1.77.0-nightly
आप इसे चलाकर Anchor संस्करण बदल सकते हैं:
avm install 0.29.0
avm use 0.29.0
error: package solana-program v1.18.0 cannot be built
error: package `solana-program v1.18.0` cannot be built because it requires rustc 1.72.0 or newer, while the currently active rustc version is 1.68.0-dev
Either upgrade to rustc 1.72.0 or newer, or use
cargo update -p solana-program@1.18.0 --precise ver
solana --version का उपयोग करके अपने द्वारा चलाए जा रहे Solana के संस्करण की जाँच करें। फिर उस संस्करण को ऊपर ver में डालें। एक उदाहरण समाधान नीचे दिखाया गया है:

error[E0658]: use of unstable library feature ‘build_hasher_simple_hash_one’
यदि आपको निम्नलिखित त्रुटि (error) मिलती है:
error[E0658]: use of unstable library feature 'build_hasher_simple_hash_one'
--> src/random_state.rs:463:5
|
463 | / fn hash_one<T: Hash>(&self, x: T) -> u64 {
464 | | RandomState::hash_one(self, x)
465 | | }
| |_____^
|
= note: see issue #86161 https://github.com/rust-lang/rust/issues/86161 for more information
= help: add #![feature(build_hasher_simple_hash_one)] to the crate attributes to enable
निम्नलिखित कमांड चलाएं: cargo update -p ahash@0.8.7 --precise 0.8.6.
क्रेडिट (Credit): https://solana.stackexchange.com/questions/8800/cant-build-hello-world
Error: Deploying program failed: Error processing Instruction 1: custom program error: 0x1
Error: Deploying program failed: Error processing Instruction 1: custom program error: 0x1
There was a problem deploying: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }.
यदि आपको यह त्रुटि मिलती है, तो आपकी कुंजियां (keys) सिंक नहीं हैं। anchor keys sync चलाएं।
Error: failed to send transaction: Transaction simulation failed: Attempt to load a program that does not exist
आपकी कुंजियां (keys) सिंक नहीं हैं। anchor keys sync चलाएं।
Error: Your configured rpc port: 8899 is already in use
आपने वैलिडेटर बैकग्राउंड में चलने के दौरान बिना --skip-local-validator के anchor test चलाया। या तो वैलिडेटर को बंद करें और anchor test चलाएं या वैलिडेटर के चलने के दौरान anchor test --skip-local-validator चलाएं। स्किप लोकल वैलिडेटर (Skip local validator) का अर्थ है उस अस्थायी वैलिडेटर को छोड़ना जो यह प्रोजेक्ट के लिए बनाता है, न कि उसे जो बैकग्राउंड में चल रहा है।
Error: Account J7t…zjK has insufficient funds for spend
अपने डेवलपमेंट एड्रेस पर 100 SOL एयरड्रॉप (airdrop) करने के लिए नीचे दिया गया कमांड चलाएं:
solana airdrop 100 J7t...zjK
Error: RPC request error: cluster version query failed
Error: RPC request error: cluster version query failed: error sending request for url (http://localhost:8899/): error trying to connect: tcp connect error: Connection refused (os error 61)
There was a problem deploying: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }.
इसका मतलब है कि solana-test-validator बैकग्राउंड में नहीं चल रहा है। किसी अन्य शेल में solana-test-validator चलाएं।
thread ‘main’ panicked at ‘called Option::unwrap() on a None value’
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /Users/username/.cargo/git/checkouts/anchor-50c4b9c8b5e0501f/347c225/lang/syn/src/idl/file.rs:214:73
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
यह संभव है कि आपने अभी तक anchor build नहीं चलाया है।
I’m using Mac and I get Error: failed to start validator: Failed to create ledger at test-ledger: blockstore error
इस Stack Exchange थ्रेड (thread) में दिए गए निर्देशों का पालन करें।
I don’t have corepack on my Mac despite having node.js
निम्नलिखित कमांड चलाएं:
brew install corepack
brew link --overwrite corepack
क्रेडिट (Credit): https://stackoverflow.com/questions/70082424/command-not-found-corepack-when-installing-yarn-on-node-v17-0-1
error: not a directory:
BPF SDK: /Users/rareskills/.local/share/solana/install/releases/stable-43daa37937907c10099e30af10a5a0b43e2dd2fe/solana-release/bin/sdk/bpf
cargo-build-bpf child: rustup toolchain list -v
cargo-build-bpf child: rustup toolchain link bpf /Users/rareskills/.local/share/solana/install/releases/stable-43daa37937907c10099e30af10a5a0b43e2dd2fe/solana-release/bin/sdk/bpf/dependencies/bpf-tools/rust
error: not a directory:
कैश (cache) साफ़ करें: rm -rf ~/.cache/solana/* चलाएं।
Error: target/idl/day_1.json doesn’t exist. Did you run anchor build?
एक नया प्रोजेक्ट बनाएं और इसे day1 के बजाय day_1 नाम दें। ऐसा लगता है कि Anchor कुछ मशीनों पर चुपचाप अंडरस्कोर डाल देता है।
RareSkills के साथ और जानें
यह ट्यूटोरियल हमारे मुफ़्त Solana कोर्स (Course) का पहला ट्यूटोरियल है।
मूल रूप से 08 फरवरी, 2024 को प्रकाशित