هاردهت یا ترافل؟ مسئله این است!

به‌عنوان یه توسعه‌دهنده‌‌ی مبتدیِ بلاکچین کدوم رو انتخاب کنیم؟


سلام دوستان عزیزم. امیدوارم که حسابی خوب باشین. خیلی وقت بود که میخواستم شروع کنم به پست گذاشتن، اما به هر صورت فرصت بار نمیشد، تا اینکه بالاخره عزمم رو جزم کردم و شروع کردم.

برای اولین مطلبی که میخوام باهاتون تو حوزه ی بلاکچین به اشتراک بذارم به نظرم اومد اینکه یه مقایسه کلی از hardhat و truffle داشته باشیم میتونه برای علاقه مندان ورود به این حوزه خوب باشه.

پس، بریم که هاردهت و ترافل رو با همدیگه یه مقایسه ای بکنیم و ببینیم که اصلاً از کدوم بهتره استفاده کنیم؟ ( البته سوای این 2 بزرگوار! اخیراً foundry هم به این عرصه اومده که در حال حاضر با اون کاری نداریم اما ایشالا در آینده نزدیک راجع به اون هم صحبت میکنیم.

خب دیگه بیشتر از این اذیتتون نمیکنم و بریم سر وقت اصل مطلب:

یکی از نقاط ضعف اصلی تو زندگی هر توسعه‌دهندة بلاکچین یافتن مناسب‌ترین چارچوب یا ابزار کاره. افراد معمولاً چند روز یا چند هفته رو برای پیدا کردن ابزار مناسب صرف می‌کنن.

یکی از بحث‌های اصلیه این وسط، انتخاب بین هاردهت (Hardhat) و ترافل (Truffle) هستش.

توسعه‌دهنده ها با کمک این محیط‌های توسعه می‌تونن بسیاری از وظایفی رو که ذاتاً تو روند توسعۀ اپلیکیشن‌های غیرمتمرکز(DApps) و قراردادهای هوشمند(smart contract) وجود داره، مدیریت کنن.

اگه که به‌تازگی کار خودتون رو تو دنیای بلاکچین شروع کردین و دقیقاً، به این فکر می‌کنین که کدوم رو انتخاب کنین: هاردهت یا ترافل، پس جای درستی هستین!! تو پاراگهاف‌های زیر، در مورد هر دو چارچوب صحبت کردیم و بعدش اومدیم بین این 2 بزرگوار! یه مقایسۀ کوچیکی هم انجام دادیم.

HardHat :


هاردهت یک محیط توسعۀ اتریوم برای توسعه‌دهندگانه بلاکچینه که وظایف متعددی رو اجرا می‌کنه. این ابزار به جز استقرار(دیپلوی) و اجرای تست‌ها، چند ویژگی دیگه رو هم ارائه میده که اون رو خیلی قوی‌ و منحصربه‌فرد می‌کنه. حالا تو این قسمت این ویژگی‎ها رو یک‌به‌یک بررسی می‌کنیم.

1. شبکۀ هاردهت

هاردهت به طور فابریک! یک شبکۀ هاردهت داره که یک نود لوکال شبکۀ اتریومه و برای توسعه‌ای طراحی شده است که ویژگی‌های متعددی مانند پیام‌های خودکار خطا، فورکینگ شبکۀ اصلی (mainnet forking) و حالت‌های ماینینگ رو فراهم می‌کنه.

بنابراین، اگه از هاردهت استفاده می‌کنین، به طور پیش‌فرض از شبکۀ هاردهت هم استفاده می‌کنین. این شبکه با هر تراکنش دریافتی، یک بلوک رو به طور منظم و بدون هیچ تأخیری استخراج می‌کنه.

2. پلاگین‌ها

در این بخش به سراغ پلاگین‌ها می‌ریم. پلاگین‌ها، افزونه‌هایی هستن که اونها رو می‌تونین تو برنامه‌ها لود کنین تا کاراییشون بهبود پیدا کنه و یا ویژگی ها جدیدی به هاردهت اضافه کنه.

تو بخش توسعه با هاردهت بیش از ۳۰ تا پلاگین وجود داره که به همین دلیل ازشون به عنوان ستون فقرات هاردهت هم یاد می‌شه. تو این قسمت چند مورد از محبوب‌ترین این پلاگین‌ها رو همراه با کاربردهاشون فهرست‌بندی کردیم:

· @nomiclabs/hardhat-ethers: این پلاگین به توسعه‌دهندگان امکان میده ethers.js رو تو محیط اجرای هاردهت (Hardhat Runtime Environment) تزریق کنن.

· @nomiclabs/hardhat-waffle: با استفاده از اون می‌تونین یک ارائه‌دهندة سازگار با وافل (Waffle-compatible provider) رو به محیط اجرای هاردهت اضافه کنین.

· @nomiclabs/hardhat-etherscan: قراردادهای اتراسکن (Etherscan) رو به طور خودکار تأیید می‌کنه.

· :hardhat-gas-reporter مقدار گاز مصرفی برای هر واحد تست (unit test) و میانگین مصرف گاز رو نشون میده.

3. تست کردن

هاردهت برای تست کردن قراردادهای هوشمند رویۀ بسیار ساده‌ای رو ارائه میده که هنگام ایجاد این قراردادها، امکان نوشتن تست‌های خودکار رو به توسعه‌دهنده ها میده. هاردهت برای آشنا کردن کاربرانش با روش‌های تست نویسی، داکیومنت های بسیار عالی ای داره.

اگه تو بخش تست نویسی هاردهت تازه‌وارد هستین، برای آشنایی بیشتر باهاش ایشالا بعداً مطالب بیشتری براتون آماده میکنم ?

حالا بریم تو دنیای Truffle :


ترافل هم مثل هاردهت یک محیط توسعه داره که مختص بلاکچین اتریوم(و البته بلاکچین های مبتنی بر EVM) هستش. ترافل چارچوب توسعۀ بسیار رایجیه و جامعه کاربری بزرگی داره ( البته لازم به ذکره که اخیراً استفاده از هاردهت در حال رواج بیشتره، علی الخصوص بخاطر قابلیت لاگ گرفتن از اسمارت کانترکت ها).

توسعه‌دهنده ها میتونن برای توسعۀ اپلیکیشن‌های غیرمتمرکز از Truffle Suite استفاده کنن.

ترافل سوئیت ( از محصولات Consensys که از معتبرترین های حوزه بلاکچین هستش) اکوسیستمی برای توسعۀ Web3است که از سه ابزار به نام ترافل، گاناش (Ganache) و دریزل(Drizzle) تشکیل شده است.


· ترافل: محیط توسعه‌ایه که از EVM برای توسعۀ قراردادهای هوشمند استفاده می‌کنه.

· گاناش: ابزاریه که برای راه اندازی بلاکچین اتریوم لوکال روی سیستم خودمون استفاده می‌کنیم و میشه ازش برای دیپلوی و تست قراردادهای هوشمند استفاده کرد.

علاوه بر این، گاناش به توسعه‌دهنده ها امکان میده که در طول فرآیندهای توسعه جلوی پرداخت غیرضروری gas fee رو بگیرن.

· دریزل: مجموعه‌ای از کتابخونه‌های فرانت‌اند (frontend) هستش که به عنوان مبنا، یک Redux store داره.

با استفاده از این ابزارها، توسعۀ فرانت‌اند خیلی خیلی آسونتر میشه.

از جمله ویژگی های ترافل میشه موارد زیر رو عنوان کنیم:

1. مدیریت قرارداد هوشمند:

ترافل به ما کمک می‌کنه تا artifact -های قراردادهای هوشمند را مدیریت کنیم، طوری که بتونیم بیشتر توجهمون رو به سایر بخش‌های فرایند توسعه معطوف کنیم و همینطور زماون خیلی کمتری رو برای سازماندهی پروژه صرف کنیم.

2. مهاجرت و توسعۀ قابل اسکریپت‌نویسی:

با استفاده از ترافل میشه اسکریپت‌های توسعه بنویسیم که به ما در پروسه های مختلف پروژه بلاکچینی مون کمک می‌کنن.

3. کنسول تعاملی قدرتمند:

ترافل دو کنسول مختلف رو برای کار با اسمارت کانترکت ها رو در اختیارمون میذاره.

(اولی) truffle console: یک کنسول تعاملی که با استفاده ازش میتونیم به نودهای اتریوم(یا سایر شبکه های مشابه) متصل بشیم. برای راه‌اندازی کنسول، از دستور truffle console استفاده میشه.

به علاوه اینکه کنسول ترافل بهمون این امکان رو میده که با اسمارت کانترکت هامون ارتباط برقرار کنیم.

(دومی) Truffle Develop: یک کنسول دیگه اس کاملاً مشابه truffle console با این فرق که همزمان با راه اندازیش به ما یک بلاکچین آماده ی لوکال میده که با اون بتونیم کار خودمون رو انجام بدیم(توی هاردهت هم مشابه اش رو داریم که با نوشتن دستور hardhat node میشه بهش دسترسی پیدا کرد)

کافی است Truffle Develop را با استفاده از دستور truffle develop راه‌اندازی کنیم.


3. داشبورد ترافل

اخیراً، ترافل یک داشبور معرفی کرده (Truffle Dashboard) که راه ساده‌تری برای استفاده از کیف پول متامسک (Metamask) فعلی‌ برای استقرارها و تراکنش‌ها ارائه می‌کنه. استفاده از داشبورد ترافل هم آسونه و هم اینکه از همون اول آمادۀ نصب و اجراست. از داشبورد ترافل میشه تو پروژه های هاردهت هم استفاده کرد. ترافل در خصوص داشبوردش هم داکیومنت هایی رو برای یادگیری و استفاده داره که میتونین مطالعه ش کنین.

کدام مورد قوی‌تره؟

در این قسمت چند مورد از ویژگی‌های اونها رو مقایسه کرده و جواب نهایی سوالمون رو پیدا می‌کنیم.

1- دیباگ کردن

حتماً میدونین که دیباگ کردن کدهای سالیدیتی (Solidity) کار سختیه. وقتی چیزی خراب میشه، فقط یک پیام خطا دریافت می‌کنیم، و بیشتر اوقات، دیباگ کردن اونچه خراب شده، ناجوره. البته که بعضی وقت ها هم ارورها کاملاً قابل درک هستن، اما خب کلاً دردسر داره.

خوشبختانه، هاردهت یک ویژگی به نام console.log برای سالیدیتی معرفی کرد که واقعاً کار با اسمارت کانترکت های سالیدیتی رو خیلی خیلی برامون راحت تر میکنه و هر لحظه میتونین ببینیم چه اتفاقی توی کدمون داره میفته (درست مثل زمانی که مثلاً داریم با جاوااسکریپت کد میزنیم و یه جایی مشکل میخوریم و خروجی دلخواهمون رو نمیگیریم که میایم لاگ میگیریم، و بعدش میفهمیم کجا رو داریم اشتباه میزنیم!)

تو هاردهت میشه به راحتی با ایمپورت کردن پلاگین console توی اسمارت کانترکتمون، از این ویژگی استفاده کنیم.


EVM ایجاد شده با هاردهت به طور خاص از این ویژگی پشتیبانی می‌کنه و ازاین‌رو بومیه Hardhat Node هستش. این ویژگی به‌تنهایی یک خصوصیت فوق العاده حرفه‌ای برای هاردهت هستش.

از سوی دیگه، ترافل سیستم دیباگ خودش رو بهبود داده و براش چند تا افزونه داره، اما خب کلاً به نظر، هاردهت ابزاری آسونتر و قوی‌تر برای دیباگ کردن به نظر می‌رسه.

2- کتابخونه‌های وب3 (Ethersو Web3)

هاردهت به طور پیش‌فرض از ethersjs استفاده می‌کنه(که البته میشه اون را برای استفاده از Web3jsتغییر داد). با این‌حال، ترافل بطور پیشفرض از Web3js استفاده می‎کنه.

از Etherjs می‌تونین با ترافل نیز استفاده کنین، اما اجرای اون پیچیده‌تر و سخت‌تره.

درحالی‌که ethers-jsو web3-js مشابه هستن، هر روز که میگذره، تعداد توسعه‌دهنده هایی که از ethersjs به عنوان پیش‌فرض استفاده می‌کنن به‌شدت در حال افزایشه.

3. نود لوکال شبکه ی اتریوم

همونطور که پیشتر هم راجع بهش یه صحبت‌هایی کردیم، هاردهت همراه با خودش Hardhat Node را داره. با این‌حال، برای توسعه‌دهندگان هیچ GUI ای نداره که بشه باهاش اطلاعات اکانت ها و تراکنش ها رو در هر لحظه به راحتی مشاهده کرد.

اما از طرف دیگه، ترافل از گاناش استفاده می‌کنه که به راحتی میشه جداگونه تنظیمش کرد. به علاوه اینکه هم نسخه دسکتاپ(با GUI) داره و هم نسخه ای که بصورت کامندلاین اجرا میشه(ganache-cli که البته اخیراً دیگه اسمش به همون ganache تغییر کرده).

اگه GUI رو ترجیح می‌دین، صد البته که باید گاناش رو انتخاب کنین.

4. استقرار(دیپلوی یا مایگریت)

هاردهت برای استقرار یک کانترکت از اسکریپت‌های اصلی جاوا اسکریپت استفاده می‌کنه؛ بنابراین، شروع با اون آسونتره و استفاده ازش هم نسبتاً ساده اس.

ترافل از یک روش استقرار مبتنی بر مهاجرت (که خودشون فایل‌های js ، اما دارای ترتیب اجرای متوالی هستن) استفاده می‌کنه که برای یک شخص مبتدی کمی پیچیده‌تره، اما می‌تونه تو درازمدت مفید باشه؛ توجه داشته باشید که نیازهای استقرارتون ممکنه در آینده تغییر بکنه.

اما از نظر سهولت دیپلوی کردن کانترکت، هاردهت قطعاً از همه بهتره.

5. تست کردن

برای انجام تست‌های مختلف، هم ترافل و هم هاردهت از کتابخونه ی Chai (Chai assertion library) و Mocha به عنوان فریمورک های آزمایشی خودشون استفاده می‌کنن، اما هاردهت وافل (waffle) رو هم داره. لازم به ذکره، وقتی نوبت به تست کردن اسمارت کانترکت‌ها برسه، هر دو قوی هستن و جای نگرانی نیست.

6. آمار

قبل از راه‌اندازی هاردهت، Web3 محبوب‌‎ترین چارچوب برای تست کردن قراردادهای هوشمند بود.

اما الان به وضوح میشه دید که این روند در حال تغییره و هاردهت در مقایسه با ترافل محبوبیت بیشتری رو به دست آورده.

طبق آمار NPMJS، ترافل تقریباً ۳۰ هزار بار در هفته دانلود میشه و هاردهت حدود 120 هزار بار که تقریباً سه برابر ترافل هستش.

7. در دسترس‌بودن پشتیبانی / کمک

جامعه Github ترافل کاملاً فعال و البته بسیار مفید هستش، درحالی‌که هاردهت یک سرور Discordبرای پشتیبانی کامیونیتیه خودش ارائه میده. لازم به یادآوریه، همونطور که سابقاً گفتیم،ترافل توسط Consensys پشتیبانی میشه و ازاین‌رو میتونیم انتظار پشتیبانیه خوبی از سمت اون تیم رو داشته باشیم. هاردهت نیز از طریق سازمان Nomic Foundation مدیریت و توسعه داده میشه و یک سیستم پشتیبانی شگفت‌انگیز و به همون اندازه خوب از طریق سرور discordخودش داره.

خب خب خب .... این همه صحبت کردیم.

در نهایت به عنوان نتیجه‌گیری کلی باید اینطور بگیم:

انتخاب بهترین گزینه از بین این 2 بزرگوار! واقعاً کار خیلی سختیه. انتخاب ترافل یا هاردهت به اولویت‌ها و موارد کاربرد هر شخص بستگی داره، چون هر جفتشون، ابزارهایی بسیار قدرتمند هستن و کار باهاشون بسیار لذت بخشه.

توصیه اکید میکنم که اگه تو مسیر برنامه نویسی حوزه بلاکچین تازه‌کار هستین، بهترین کار اینه که حتماً هر دوتاشون رو بررسی کنین و ببینید کدومشون به قولی بیشتر راه دستتونه، و با کدومشون بیشتر ارتباط برقرار میکنین. اینجوری میشه تصمیم گرفت که کدوم یکی براتون بهترین گزینه است.

ببخشید که یه مقدار طولانی شد توضیحات و صحبتهام.

مرسی که باهام همراه بودین.

امیدوارم این مقاله تونسته باشه اطلاعاتی در مورد این ابزارهای توسعه بر بستر بلاکچین بهتون داده باشه و کمکی(هر چند ناچیز) در فرآیند یادگیری و ورودتون به دنیای برنامه نویسی بلاکچین بهتون کرده باشه.

خوشحال میشم اگر این مطلب رو دوست داشتین، لایکش کنین و با دوستاتون هم به اشتراک بذارینش. اگر نظر یا تجربه ای هم تو این زمینه دارین خوشحال میشم زیر همین پست باهامون در میون بذارین.

همینطور پست های بعدیم(یا مطالب قبلی که تو سایت خودمون گذاشتیم) رو هم از دست ندین هااا! از من گفتن!!! :-D