برنامه نویسی در حوزه بلاک‌چین (پرسش و پاسخ)

این پست بنظرم می‌تونه به خیلی از افرادی که می‌خوان برنامه نویسی تو حوزه بلاک‌چین رو یادبگیرند کمک کننده باشه، برای همین شبکه‌های اجتماعی و کامیونیتی‌های زیادی چه فارسی و چه انگلیسی زبان رو بررسی کردم تا بتونم همچین پستی رو بنویسم. ممنون میشم با لایک و کامنت از این پست حمایت کنید??.پرسش: برای کسی که فرانت رو تا حدی مسلط شده و میخواد اسمارت‌کانترکت دولوپر بشه ، کدوم مسیر مناسب تره؟ بره اول بک‌اند رو یادبگیره و بعد بره سمت سالیدیتی و اسمارت کانترکت ها یا یادگیری بک‌اند الزامی نیست و میتونه مستقیم بره و سالیدیتی یادبگیره؟پاسخ اول: در حال حاضر دولوپرهای بلاکچین دو دسته کلی هستند1: Blockchain Core Dev2: Blockchain App Devاولین دسته نیاز به بک-اند قوی دارند و البته این دسته بخش کوچک از دنیای بلاکچین هستند، جاب افر های کمتری هم دارند. کارشون اینه که روی هسته مرکزی بلاکچین ها کار میکنند.اما دسته دوم خیلی گسترده است. وقتی شما یک اپلیکیشن روی بلاکچین های مهم مثل اتریوم میسازید که همون DApp ها میشند زیرشاخه های مختلفی از دولوپرهای بلاکچین و وب رو شامل میشه. و تقاضای کار بالایی هم داره.در واقع قراردادهای هوشمند مستقیما با فرانت اند سروکار دارند. اموزش سالیدیتی، openZeppelin که کتابخانه مرجع برای قراردادهای هوشمند هست خیلی کمک میکنه. بچه های جاوااسکریپت هم موقعیت شغلی خوبی میتونند پیدا کنند. Web3.js هم حتما لازم میشه و ...پاسخ دوم: اول بکند بعد اسمارت کانتراکت ... سالیدیتی زیاد سخت نیست و شاید کمتر برای پروژه به کار بیاد ولی اگه بکند بلد باشی راحت تر و کم هزینه تر و کلین کد تر میتونی با سالیدیتی کار کنی چون هر کد نویسی بیشتر باعث افزایش گس فی توی شبکه میشه این نکته خیلی مهمه. پس چی شد؟ اول بک-اند، دوم سالیدیتی، سوم web3.پاسخ سوم: (تو این پاسخ دیدگاه های جذابی رو مشاهده کردم)شخص A: بک-اند رو بالاخره باید یاد بگیری. چه قبل از یادگیری سالیدیتی چه بعد از اون. برای توسعه‌ی Dapp، شما باید در آخر از قرارداد هوشمند داده بگیری و به اون داده بدی. این کار با ماژول‌هایی انجام میشه که سمت بک‌اند عه.شخص B: جناب قراردادی که مینویسی خودش حکم سروره شماست ، نیازی ب بک اند نداری باید با کتاب خونه ی وب ۳ از طریق ری اکت یا ویو ارتباط بگیری با قراردادتپس مهمه تمرکز رو روی ویو یا ری اکت بزاری نه بک اندشخص A: آموزش و یادگیری سالیدیتی مستقل از یادگیری بک‌انده. یعنی اگر شما بک‌اند رو ندونی، می‌تونی به سادگی سالیدیتی رو یاد بگیری. این دو تا از هم جدا هستند.ولی، شما در یک پروژه قصد داری بین کاربر و قرارداد هوشمند تعامل و ارتباط برقرار کنی. یعنی کاربر بهش داده بده یا ازش داده بگیره. در این صورت از ماژول‌های موجود استفاده می‌کنی که این کار رو انجام میدن. حالا، مسأله اینه که ماژول‌ها رو کجا بنویسیم؟ تو بک یا فرانت؟ این کاملا به نوع پروژه و محصول نهایی شما بستگی داره. اگر قرار نیست که محصول نهایی شما هیچ داده‌ای رو در هیچ کجا نگه‌داری کنه و داده‌های لازم، در سمت کلاینت نگه‌داری بشن، اون وقت شما از این ماژول‌ها در طرف فرانت استفاده می‌کنید. در غیر این صورت، در طرف سرور. هر چند، در حالت دوم میشه به فراخور پروژه این ماژول‌ها رو در فرانت نوشت.شخص B: دوست من داری اشتباه میزنی ، داده ها تو بلاکچین از طریق قرارداد هوشمند ذخیره میشن و برای تعامل هم نیاز به فرانت هست ، قرارداد هوشمند حکم همون بک اند رو داره و بلاکچین حکم همون دیتابیس رو و ماشین مجازی اتریوم حکم هاستیو داره که در برنامه های متمرکز فایلای شما روش اجرا میشه ، هیچ نیازی به یادگیری بک اند نیست در واقع زبان بک اند همین سالیدیتیه.شخص A: بذار با یه مثال برات روشن کنم:فرض کن یه کنسرسیوم از چند بانک داریم که می‌خوان اطلاعات مشتریانشون رو با هم به اشتراک بذارن. این کنسرسیوم روی بلاک‌چینه و هر بانک (نه هر شعبه) یه قرارداد هوشمند داره. برای هر بانک یه درگاه آنلاین طراحی شده تا متصدیان در هر شعبه از بانک، از طریق اون درگاه با قرارداد هوشمند بانکشون ارتباط بگیرن. روند کار هم به این شکله که وقتی مشتری در یک بانک حساب باز می‌کنه، متصدی که براش حساب باز کرده، وارد درگاه میشه و اطلاعات مشتری رو به قرارداد هوشمند بانک میده، این قرارداد اطلاعات رو به سایر بانک‌های کنسرسیوم میده تا در لجرشون ذخیره کنن. بانک‌ها قبل از ذخیره‌ی این اطلاعات در لجر، باید ابتدا اون رو به سمت دیتا سنترشون بفرستن، پردازش کنن سپس نتیجه‌ی پردازش رو به قرارداد هوشمند می‌فرستن تا در لجر ذخیره کنه.در همچین پروژه‌ای، ماژول web3js رو کجا require کنیم؟ در فرانت؟ اگه همه‌ی ماژول‌ها در فرانت آورده بشه چطوری با سرور و تجهیزات دیتا سنتر ارتباط بگیریم و داده‌ها رو بهش بدیم؟ ولی اگه از NodeJS استفاده کنیم و فایلش رو در سرورِ تعبیه شده در دیتا سنتر قرار بدیم، می‌تونیم دیتا سنتر رو به روز کنیم.در این مثال می‌بینید که قرارداد هوشمند فقط جزیی از بک‌انده نه همه‌ی بک‌اند و زنجیره‌ی بلوکی نمی‌تونه به تنهایی نقش دیتابیس رو ایفا کنه و اتصال به سایر دیتابیس‌ها در این مثال اجتناب‌ناپذیره.شخص B:?? اصلا مثالتون درست نبود به نظرم مگه هرکاری تو ی پروژه انجام میشه رو یک نفر باید انجام بده ؟الان اینستاگرام وب سایت داره اپ اندروید و ای او اس داره ، هوش مصنوعی داره و ... همش رو یک نفر انجام میده ؟ در این پروژه شما بخش بک اند کاملا مجزاست از قرارداد هوشمند و باید افراد مختلفی انجامش بدنتو همه ی درخواست کارها هم ببینین برنامه نویس سالیدیتی و وب 3 میخوان ک یک شخص باید بلد باشه اصلا شرط لازمی نیست و کاملا اختیاریه بک اندشخص A: تو مثالی که گفتم بک‌اند و قرارداد هوشمند جدا نیستند. web3js رو در NodeJS ری‌کوآیر می‌کنیم و NodeJS رو در سرور مستقر در دیتا سنتر قرار می‌دیم. اطلاعات مشتری بعد از پردازش در سرور، توسط سرور به سمت قرارداد هوشمند فرستاده میشه. پس باید در سرور ( و در NodeJS) قرارداد هوشمند رو تعریف کرده و باهاش اتصال و ارتباط برقرار کنیم. به همین علت web3js رو اونجا require می‌کنیم. حالا فرض کنین یه برنامه‌نویس، قرارداد هوشمند رو کد بزنه، web3js رو هم کد بزنه ولی هیچ دیدی نسبت به بک‌اند نداشته باشه. چطوری می‌تونه از پس این پروژه بر بیاد؟ مثلا ما بخوایم به ازای هر تعامل با قرارداد هوشمند یا به ازای هر ثبت اطلاعات مشتری در قرارداد هوشمند، یه لاگ در سرور ثبت بشه. اگه این برنامه‌نویس emit کردن ایونت‌ها رو ندونه، ندونه چطوری باید با promieventها رفتار کنه، چه خروجی می‌تونه به ما بده؟ از اون طرف، اگه تو این پروژه یه بک‌اند دولوپر داشته باشیم که بلاک‌چین دولوپر نباشه، چطوری می‌تونه بهش کمک کنه وقتی خروجی‌های web3js رو نمی‌شناسه، ارورهای web3js رو نمی‌شناسه؟ اگه یه ارور web3js در بک‌اند رخ بده از کجا بفهمه مشکل از چیه؟خیلی مهمه که یه بلاک‌چین دولوپر بک‌اندش قوی باشه. هر چند می‌تونه آفرهایی رو پیدا کنه که به کار با بک‌اند نیازی ندارن.شخص B: ممنون از توضیحاتت حق با شماست کاملا اولویت اخر بک اند می‌تونه باشه برای کسی که تازه میخواد شروع کنه و دیدی که شما داشتین خیلی جذاب بود واسم و خیلی حرفه ای تر به قضیه نگاه کردین ، باعث شدین من هم به فکر تقویت بک اند بیفتم چون قطعا پیشنهادهای کار بهتری بدست میاد❤️