سلام دوستان! تو این بلاگ قراره یه سفر کوتاه و خودمونی به دنیای بلاکچین داشته باشیم. نمیخوایم خیلی تخصصی و پیچیده حرف بزنیم؛ هدفمون اینه که مفاهیم اولیه و پایهای بلاکچین رو به زبون ساده و قابل فهم توضیح بدیم. پس اگه تا حالا چیزی از بلاکچین نشنیدی یا فکر میکنی خیلی پیچیدهست، خیالت راحت! اینجا قراره همه چیز رو با هم و قدم به قدم یاد بگیریم.
ولت (wallet)
تصور کن تو دنیای واقعی، کیف پول یا گاوصندوق داری، درسته؟
- کیف پول فیزیکی: جاییه که پول نقد و کارتهای بانکیت رو نگه میداری.
- گاوصندوق: برای اشیای باارزشتر مثل طلا و اسناد مهم استفاده میشه.
حالا این مفهوم رو بیاریم تو دنیای Web3 و بلاکچین:
توی بلاکچین، به جای پول نقد یا طلا، ما داراییهای دیجیتالی مثل ارزهای دیجیتال (مثل بیتکوین و اتریوم) یا NFTها (توکنهای غیرقابل معاوضه) داریم. برای نگهداری و مدیریت این داراییهای دیجیتال، ما به یک “کیف پول دیجیتال” یا همون ولت (Wallet) نیاز داریم.
نقش اصلی ولت چیه؟
- نگهداری داراییها: ولتها داراییهای دیجیتال شما رو “نگه نمیدارن” به معنای فیزیکی. در واقع، داراییهای شما روی خود بلاکچین ثبت شدن. کاری که ولت میکنه اینه که به شما دسترسی به این داراییها رو میده. مثل این میمونه که کلید گاوصندقت رو داری. خود گاوصندوق سر جاشه، ولی تو با کلید میتونی بهش دسترسی پیدا کنی.
- ارسال و دریافت: با استفاده از ولتت میتونی ارزهای دیجیتال رو به دیگران بفرستی یا ازشون دریافت کنی. هر ولت یک آدرس منحصر به فرد داره (مثل شماره حساب بانکی) که برای این کار استفاده میشه.
- امضای تراکنشها: وقتی میخوای کاری روی بلاکچین انجام بدی (مثلاً پول بفرستی یا یک NFT بخری)، باید اون تراکنش رو “امضا” کنی. این امضا با استفاده از یک “کلید خصوصی” (Private Key) که فقط خودت داری انجام میشه. ولت مسئول نگهداری امن این کلید خصوصی برای شماست و اجازه میده باهاش تراکنشها رو امضا کنی.
- تعامل با برنامههای غیرمتمرکز (dApps): توی Web3، کلی اپلیکیشن غیرمتمرکز (مثل بازیها، صرافیهای غیرمتمرکز یا پلتفرمهای وامدهی) وجود داره که بهشون میگن dApp. برای استفاده از این dAppها و اتصال بهشون، به ولت نیاز داری.
انواع ولتها
به طور کلی، ولتها به دو دسته اصلی تقسیم میشن:
- ولتهای گرم (Hot Wallets): اینها ولتهایی هستن که به اینترنت وصلن. مثل:
- ولتهای نرمافزاری (Software Wallets): مثل متامسک (MetaMask) که روی مرورگر یا گوشی نصب میشن. استفاده ازشون راحته و برای تعامل روزمره با dAppها مناسبن.
- ولتهای صرافی (Exchange Wallets): وقتی تو صرافیهای ارز دیجیتال (مثل بایننس) حساب باز میکنی، صرافی یک ولت برای تو ایجاد میکنه. کنترل کامل این ولت دست خودت نیست و صرافی مسئولیت نگهداری کلیدهای خصوصیت رو داره. (البته این نوع ولت برای شروع خیلیها استفاده میکنند ولی برای نگهداری مقادیر زیاد توصیه نمیشه).
- ولتهای سرد (Cold Wallets): اینها ولتهایی هستن که به اینترنت وصل نیستن و امنیت خیلی بالاتری دارن. مثل:
- کیف پولهای سختافزاری (Hardware Wallets): دستگاههای فیزیکی کوچیکی شبیه فلش مموری هستن (مثل لجر Ledger یا ترزور Trezor) که کلیدهای خصوصی رو آفلاین نگه میدارن. برای نگهداری مقادیر زیاد دارایی توصیه میشن.
- کیف پولهای کاغذی (Paper Wallets): یک آدرس و کلید خصوصی هستن که روی کاغذ چاپ میشن. (الان کمتر استفاده میشن).
نکته
مهمترین چیزی که باید در مورد ولتها بدونی اینه که کلید خصوصی (Private Key) و یا عبارت بازیابی (Seed Phrase/Recovery Phrase) شما (که معمولاً 12 یا 24 کلمه انگلیسی هست) مثل رمز عبور گاوصندقت میمونه. هرگز و تحت هیچ شرایطی این رو به کسی نگو یا در جایی که امن نیست ذخیره نکن! اگر کسی به اینها دسترسی پیدا کنه، میتونه تمام داراییهای دیجیتال شما رو کنترل کنه.
خلاصه
ولت شما کلیدیه که به داراییهای دیجیتالت روی بلاکچین دسترسی پیدا میکنه و بهت اجازه میده باهاشون کار کنی و با دنیای Web3 تعامل داشته باشی.
بلاکچین: یک دفتر کل توزیعشده و غیرمتمرکز
تصور کن یه دفترچه یادداشت بزرگ و عمومی داری که همه میتونن اونو ببینن، ولی هیچ کس نمیتونه چیزی رو که قبلاً توش نوشته شده پاک کنه یا تغییر بده. فقط میشه صفحات جدید (بلاکهای جدید) به ته دفترچه اضافه کرد.
- بلاک (Block): هر “بلاک” مثل یه صفحه از این دفترچه یادداشته که شامل مجموعهای از تراکنشها (مثلاً انتقال ارز، یا اجرای یک قرارداد) هست که تازه اتفاق افتادن.
- زنجیره (Chain): این بلاکها به ترتیب زمانی به هم وصل میشن و یک “زنجیره” رو تشکیل میدن. هر بلاک، شامل اطلاعات بلاک قبلی خودش هم هست. این پیوند باعث میشه که تغییر دادن اطلاعات بلاکهای قبلی تقریباً غیرممکن بشه (امنیت بلاکچین از همینجا میاد).
- توزیعشده (Distributed): این دفترچه یادداشت (بلاکچین) فقط دست یک نفر نیست. هزاران و میلیونها کپی ازش در سراسر دنیا روی کامپیوترهای مختلف (بهشون میگیم “نود” یا “گره”) وجود داره. همه این نودها همش در حال آپدیت کردن و مقایسه کردن اطلاعاتشون با هم هستن تا مطمئن بشن همه یه کپی یکسان و معتبر دارن.
- غیرمتمرکز (Decentralized): چون کپیها دست یک نهاد مرکزی نیست، هیچ کس یا هیچ سازمانی نمیتونه بلاکچین رو کنترل کنه یا اطلاعاتش رو دستکاری کنه.
کاربرد
بلاکچین اساس و بنیان Web3 هست. تمام داراییهای دیجیتال (ارز، NFT) و برنامههای غیرمتمرکز (dApps) روی این شبکه اجرا میشن.
قرارداد هوشمند (Smart Contract): کد خوداجراشونده روی بلاکچین
اینجا داستان بلاکچین خیلی جالبتر میشه! اگه بلاکچین رو یک دفترچه یادداشت خیلی پیشرفته در نظر بگیریم، قرارداد هوشمند مثل یک “برنامه کامپیوتری” یا “کد” هست که روی اون دفترچه یادداشت نوشته شده و خودش به صورت خودکار اجرا میشه، وقتی شرایط خاصی برآورده بشه.
- مفهوم: قرارداد هوشمند شبیه به یک توافقنامه یا قرارداد سنتیه، اما با این تفاوت که به جای اینکه توسط وکیلها و بانکها اجرا بشه، کد کامپیوتری اون رو به صورت خودکار و بدون نیاز به واسطه اجرا میکنه.
- مثال: فرض کن میخوای یک خانه رو اجاره کنی. توی قرارداد هوشمند میتونی بنویسی: “اگر مستأجر پول اجاره رو در تاریخ X به حساب Y واریز کرد، کلید دیجیتال خانه به او داده شود.” این کد روی بلاکچین قرار میگیره. وقتی پول واریز بشه، قرارداد هوشمند به صورت خودکار اجرا میشه و کلید دیجیتال منتقل میشه. هیچ کس نمیتونه جلوی اجرای این قرارداد رو بگیره یا اون رو دستکاری کنه.
ویژگیها
- خوداجرا (Self-executing): به محض برآورده شدن شرایط، به صورت خودکار اجرا میشه.
- غیرقابل تغییر (Immutable): وقتی روی بلاکچین قرار گرفت، دیگه نمیشه تغییرش داد.
- شفاف (Transparent): کدش برای همه قابل مشاهدهست (البته اگه بلد باشی بخونیش).
- بدون واسطه (Trustless): نیاز به اعتماد به یک واسطه (بانک، دولت، وکیل) نیست، چون همه چیز با کد و بلاکچین تضمین میشه.
کاربرد
قراردادهای هوشمند اساس ساخت برنامههای غیرمتمرکز (dApps)، صرافیهای غیرمتمرکز (DEX)، پلتفرمهای وامدهی، NFTها، بازیهای بلاکچینی و تقریباً هرچیزی که توی Web3 میبینید، هستن. اتریوم پیشرو در زمینه قراردادهای هوشمند بود.
نود بلاکچین: نگهبان و مشارکتکننده شبکه
تصور کن بلاکچین یه دفتر کل توزیعشده بزرگ و عمومی هست، که قبلاً توضیح دادیم. حالا کی این دفتر رو نگه میداره؟ کی مطمئن میشه همه صفحاتش درست و دقیق هستن و کسی تقلب نمیکنه؟ کی صفحه جدید رو بهش اضافه میکنه؟ جواب این سوالات نودها (Nodes) هستن.
نود بلاکچین چیه؟
یک “نود” یا “گره” بلاکچین، در واقع یک کامپیوتر یا سرور هست که:
- یک کپی کامل یا بخشی از تاریخچه بلاکچین رو نگهداری میکنه.
- در فرآیند اعتبارسنجی و تأیید تراکنشها و بلاکهای جدید مشارکت میکنه.
- به شبکه بلاکچین متصل هست و با سایر نودها ارتباط برقرار میکنه.
چرا نودها مهم هستن؟ (نقش و کارکردها)
نودها ستون فقرات هر شبکه بلاکچین غیرمتمرکز هستن. بدون اونها، بلاکچین معنی نداره. نقشها و کارکردهای اصلیشون شامل:
- نگهداری و توزیع دفتر کل: هر نود یک کپی از کل یا قسمتی از تاریخچه بلاکچین رو ذخیره میکنه. این کپیها دائماً با هم مقایسه و بهروز میشن تا اطمینان حاصل بشه که همه نودها یک “دفتر کل” یکسان و معتبر دارن. این توزیعپذیری (Distributed Nature) همون چیزیه که بلاکچین رو در برابر حمله و سانسور مقاوم میکنه. اگر یک نود از کار بیفته، هزاران نود دیگه همچنان شبکه رو حفظ میکنن.
- اعتبارسنجی تراکنشها: وقتی شما یک تراکنش (مثلاً انتقال ارز یا اجرای یک قرارداد هوشمند) ارسال میکنید، این تراکنش ابتدا به یکی از نودهای شبکه میرسه. اون نود و سایر نودها شروع به اعتبارسنجی اون تراکنش میکنن. مثلاً بررسی میکنن که:
- آیا فرستنده به اندازه کافی موجودی داره؟
- آیا امضای دیجیتال تراکنش معتبره؟
- آیا فرمت تراکنش صحیح هست؟
اگر تراکنش معتبر باشه، به “استخر تراکنشهای معلق” (Mempool) اضافه میشه تا توسط “ماینرها” یا “اعتبارسنجها” (Validators) در یک بلاک جدید گنجانده بشه.
اعتبارسنجی بلاکها
وقتی یک بلاک جدید توسط ماینرها (در شبکههای Proof of Work مثل بیتکوین) یا اعتبارسنجها (در شبکههای Proof of Stake مثل اتریوم 2.0) تولید میشه، این بلاک به تمامی نودها ارسال میشه. نودها بلاک رو اعتبارسنجی میکنن:
- آیا تمامی تراکنشهای داخل بلاک معتبر هستن؟
- آیا “اثبات کار” (Proof of Work) صحیح انجام شده (در PoW)؟
- آیا این بلاک به درستی به بلاک قبلی وصل شده؟
اگر بلاک معتبر باشه، هر نود اون رو به کپی خودش از بلاکچین اضافه میکنه و بدین ترتیب، شبکه به روز میشه.
تامین امنیت شبکه
نودها با اعتبارسنجی و توافق جمعی (Consensus) در مورد وضعیت بلاکچین، امنیت شبکه رو تضمین میکنن. وقتی اکثریت نودها روی یک وضعیت خاص از بلاکچین توافق میکنن، اون وضعیت به عنوان وضعیت “درست” و “قانونی” شبکه پذیرفته میشه. این مکانیسم توافق (Consensus Mechanism) هست که جلوی تقلب و دوبار خرج کردن (Double Spending) رو میگیره.
پشتیبانی از API
نودها اغلب یک API (رابط برنامهنویسی نرمافزار) رو ارائه میدن (که معمولاً از طریق JSON RPC باهاش صحبت میشه). این API به اپلیکیشنها و توسعهدهندگان اجازه میده که با بلاکچین تعامل داشته باشن، مثلاً موجودی یک آدرس رو چک کنن، تراکنشها رو ارسال کنن یا وضعیت قراردادهای هوشمند رو بخونن. این همون قسمتیه که Providers ازش استفاده میکنن.
انواع نودها
- فول نود (Full Node): این نودها یک کپی کامل و تماماً اعتبارسنجی شده از کل تاریخچه بلاکچین رو از اولین بلاک تا آخرین بلاک ذخیره میکنن. اونها فعالانه در اعتبارسنجی تراکنشها و بلاکها مشارکت میکنن. راهاندازی یک فول نود نیازمند فضای ذخیرهسازی زیاد و منابع کامپیوتری قابل توجهیه. اینها مهمترین نودها برای حفظ تمرکززدایی و امنیت شبکه هستن.
- لایت نود (Light Node) یا SPV Node: این نودها کل تاریخچه بلاکچین رو ذخیره نمیکنن و فقط اطلاعات حیاتی (مثل هدر بلاکها) رو نگهداری میکنن. اونها برای اعتبارسنجی به فول نودها متکی هستن و فقط در حدی که برای تأیید تراکنشهای خودشون لازم باشه اطلاعات رو چک میکنن. اینها معمولاً در کیف پولهای موبایل یا دسکتاپ استفاده میشن، چون نیاز به منابع کمتری دارن.
- ماینینگ نود (Mining Node) / اعتبارسنج (Validator Node): اینها فول نودهایی هستن که علاوه بر اعتبارسنجی، فعالانه در فرآیند تولید بلاکهای جدید (از طریق ماینینگ در PoW یا استیکینگ در PoS) مشارکت میکنن و برای این کار پاداش دریافت میکنن.
چرا راهاندازی نود مهم است؟
- افزایش تمرکززدایی: هرچه تعداد فول نودهای مستقل بیشتر باشه، شبکه غیرمتمرکزتر و مقاومتر در برابر سانسور میشه.
- امنیت بیشتر: نودهای بیشتر یعنی توانایی بیشتر برای تشخیص و جلوگیری از فعالیتهای مخرب.
- حفظ حریم خصوصی: با فول نود خودتون، نیازی نیست به سرویسهای شخص ثالث (مثل Infura) برای دسترسی به بلاکچین اعتماد کنید.
نودها و قراردادهای هوشمند: نقشها و ارتباطها
- اجرای قرارداد هوشمند: وقتی یک قرارداد هوشمند روی بلاکچین مستقر میشه، کد اون قرارداد روی همه (یا بیشتر) فول نودهای شبکه کپی میشه. وقتی کسی یک تراکنش رو ارسال میکنه که تابع خاصی از اون قرارداد هوشمند رو فراخوانی میکنه، نودها اون تراکنش رو دریافت میکنن و شروع به اجرای کد قرارداد هوشمند میکنند تا نتیجه رو محاسبه کنن. این شامل تغییر وضعیت متغیرهای قرارداد، انتقال ارز، یا هر عملیات دیگهای هست که در قرارداد تعریف شده.
- تأیید و اعتبارسنجی نتیجه: بعد از اینکه هر نود به طور مستقل کد قرارداد رو اجرا کرد، نتیجه رو با نتایج سایر نودها مقایسه میکنه. اگر اکثریت نودها روی نتیجه یکسانی به توافق برسن، اون نتیجه به عنوان نتیجه معتبر شناخته میشه و تغییرات ناشی از اجرای قرارداد در بلاکچین ثبت میشه. این فرآیند تضمین میکنه که حتی اگر یک یا چند نود اشتباه عمل کنن یا سعی در تقلب داشته باشن، نتیجه نهایی تحت تأثیر قرار نمیگیره.
- نودها به عنوان حافظان وضعیت قرارداد: نودها مسئول نگهداری وضعیت فعلی همه قراردادهای هوشمند روی بلاکچین هستن. این شامل تمام متغیرها، موجودی حسابها، و سایر دادههای مربوط به قراردادها میشه. وقتی یک قرارداد اجرا میشه و وضعیت اون تغییر میکنه، این تغییرات توسط نودها ثبت و نگهداری میشه.
تفاوت بین اعتبارسنجی تراکنش و اجرای قرارداد هوشمند
- اعتبارسنجی تراکنش: به طور کلی، اعتبارسنجی تراکنش شامل بررسی موارد زیر میشه:
- آیا فرستنده حق داره تراکنش رو انجام بده؟ (آیا موجودی کافی داره؟)
- آیا امضای دیجیتال معتبره؟
- آیا تراکنش با قوانین کلی شبکه سازگاره؟
- اجرای قرارداد هوشمند: این فرآیند پیچیدهتره و شامل اجرای کد قرارداد هوشمند میشه تا نتیجه یک تابع خاص تعیین بشه. این ممکنه شامل محاسبات پیچیده، دسترسی به دادهها، و تغییر وضعیت قرارداد باشه.
نتیجهگیری
- همه نودها تراکنشها رو اعتبارسنجی میکنن.
- فقط نودهایی که کپی کاملی از بلاکچین رو دارن (فول نودها) میتونن قراردادهای هوشمند رو اجرا کنن.
- اجرای قرارداد هوشمند یک نوع خاص از تراکنش هست که نیاز به پردازش بیشتری داره.
Provider (ارائهدهنده): پل ارتباطی UI با بلاکچین
حالا که بلاکچین و قراردادهای هوشمند رو میشناسیم، چطور یه اپلیکیشن توی مرورگر (UI) میتونه با این دنیای بلاکچین حرف بزنه؟ اینجا نقش Provider مطرح میشه.
- مفهوم: Provider یک لایه انتزاعی (Abstraction Layer) هست که به اپلیکیشنهای سمت کاربر (مثل وبسایتها یا اپلیکیشنهای موبایل) اجازه میده با بلاکچین ارتباط برقرار کنن. به زبان ساده، Provider رابطی هست بین اپلیکیشن شما و شبکه بلاکچین.
- مثال: وقتی شما از یک کیف پول مثل متامسک (MetaMask) استفاده میکنید و اون رو به یک وبسایت Web3 وصل میکنید، متامسک در واقع داره به عنوان یک Provider عمل میکنه. وبسایت شما برای اینکه بتونه آدرس ولت شما رو بخونه، یا درخواست ارسال تراکنش بده، از طریق این Provider با بلاکچین ارتباط برقرار میکنه.
انواع Provider
- Providerهای تحت وب (Web-based Providers): مثل Infura یا Alchemy که به شما اجازه میدن بدون نیاز به راهاندازی یک نود کامل بلاکچین، به شبکه دسترسی پیدا کنید.
- Providerهای محلی (Local Providers): مثلاً وقتی خودتون یک نود کامل اتریوم رو روی کامپیوترتون اجرا میکنید.
- Providerهای ولت (Wallet Providers): مثل متامسک که در واقع یک رابط برای کاربر فراهم میکنه تا بتونه تراکنشها رو امضا کنه و به dApps متصل بشه.
کاربرد
هر وبسایت یا اپلیکیشن Web3 برای اینکه بتونه اطلاعات رو از بلاکچین بخونه یا تراکنشی رو روی بلاکچین بنویسه (مثلاً یک NFT بخره یا توکن ارسال کنه)، نیاز به یک Provider داره.
JSON RPC (Remote Procedure Call): زبان ارتباطی با بلاکچین
خب، Provider پلی هست بین UI و بلاکچین. حالا این پل با چه زبانی حرف میزنه؟ با JSON RPC.
- مفهوم JSON RPC (JavaScript Object Notation Remote Procedure Call) یک پروتکل (مجموعهای از قوانین) برای ارتباط بین برنامههای کامپیوتریه. به زبان سادهتر، اون رو به عنوان یک “زبان استاندارد” در نظر بگیر که Providerها برای صحبت با نودهای بلاکچین (و بالعکس) ازش استفاده میکنن.
چگونگی کارکر
- درخواست (Request): وقتی اپلیکیشن شما (مثلاً از طریق یک Provider مثل متامسک) نیاز به اطلاعاتی از بلاکچین داره یا میخواد تراکنشی رو ارسال کنه، یک “درخواست JSON RPC” به نود بلاکچین میفرسته. این درخواست شامل نام متد مورد نظر (مثلاً eth_getBalance برای دریافت موجودی یا eth_sendTransaction برای ارسال تراکنش) و پارامترهای لازم (مثلاً آدرس ولت) هست.
- پاسخ (Response): نود بلاکچین این درخواست رو پردازش میکنه و یک “پاسخ JSON RPC” شامل نتیجه عملیات (مثلاً موجودی ولت یا هش تراکنش) رو برمیگردونه.
- فرمت: اطلاعات در قالب JSON (یک فرمت ساده و قابل خواندن برای تبادل داده) منتقل میشن.
مثال
- درخواست موجودی: {"jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0x...", "latest"], "id": 1}
- پاسخ موجودی: {"jsonrpc": "2.0", "id": 1, "result": "0x5a55... (موجودی به هگزادسیمال)"}
کاربرد
JSON RPC قلب ارتباطی بین اپلیکیشنهای Web3 و بلاکچین هست. بدون اون، امکان تبادل اطلاعات یا ارسال تراکنشها به بلاکچین وجود نداره. Providerها در پشت صحنه از JSON RPC برای انجام تمام عملیات بلاکچینی استفاده میکنن.
ارتباط با مفاهیم قبلی
- Providerها: برای ارتباط با بلاکچین، Providerها (مثلاً Infura) در واقع به فول نودهای خودشون متصل میشن و از طریق اونها درخواستهای JSON RPC شما رو به شبکه ارسال میکنن.
- JSON RPC: زبان مشترک برای ارتباط بین Providerها و نودهاست.
- بلاکچین: نودها دفتر کل بلاکچین رو نگهداری و به روز میکنن.
- قرارداد هوشمند: نودها اجرای قراردادهای هوشمند رو پردازش و وضعیت اونها رو روی بلاکچین ذخیره میکنن.
پس، نودها در واقع کامپیوترهایی هستند که بلاکچین رو زنده نگه میدارن، امنیتش رو تضمین میکنن و اجازه میدن که ما به عنوان کاربر و توسعهدهنده با این شبکه قدرتمند تعامل داشته باشیم.
خلاصه کلی
شما به عنوان کاربر با UI (رابط کاربری) یک dApp تعامل میکنید. این UI از طریق یک Provider (مثلاً متامسک) با شبکه بلاکچین ارتباط برقرار میکنه. این ارتباط با استفاده از زبان JSON RPC انجام میشه، که درخواستها رو به نودهای بلاکچین میفرسته. نودها اطلاعات رو از بلاکچین میخونن یا قراردادهای هوشمند رو اجرا میکنن و نتایج رو از طریق همون Provider و JSON RPC به UI برمیگردونن.
مثل یک پازله که هر قطعهش جای خودشو داره و با هم یک تصویر کامل از نحوه کار Web3 رو تشکیل میدن.
مفاهیم اولیه بلاکچین