مقایسه ترافل و هاردهت در برنامه نویسی بلاکچین
بهعنوان یه توسعهدهندة مبتدیِ بلاکچین کدوم رو انتخاب کنیم؟ هاردهت یا ترافل؟
سلام دوستای عزیزم. امیدوارم که حسابی خوب باشین. خیلی وقت بود که میخواستم شروع کنم به پست گذاشتن، اما به هر صورت فرصت بار نمیشد، تا اینکه بالاخره عزمم رو جزم کردم و شروع کردم.
برای اولین مطلبی که میخوام باهاتون تو حوزه ی بلاکچین به اشتراک بذارم به نظرم اومد اینکه یه مقایسه کلی از hardhat و truffle داشته باشیم میتونه برای علاقه مندان ورود به این حوزه خوب باشه.
پس، بریم که هاردهت و ترافل رو با همدیگه یه مقایسه ای بکنیم و ببینیم که اصلاً از کدوم بهتره استفاده کنیم؟ ( البته سوای این 2 بزرگوار! اخیراً foundry هم به این عرصه اومده که در حال حاضر با اون کاری نداریم اما ایشالا در آینده نزدیک راجع به اون هم صحبت میکنیم.
خب دیگه بیشتر از این اذیتتون نمیکنم و بریم سر وقت اصل مطلب:
یکی از نقاط ضعف اصلی تو زندگی هر توسعهدهندهی بلاکچین یافتن مناسبترین چارچوب یا ابزار کاره. افراد معمولاً چند روز یا چند هفته رو برای پیدا کردن ابزار مناسب صرف میکنن.
یکی از بحثهای اصلیه این وسط، انتخاب بین هاردهت (Hardhat) و ترافل (Truffle) هستش.
توسعهدهنده ها با کمک این محیطهای توسعه میتونن بسیاری از وظایفی رو که ذاتاً تو روند توسعۀ اپلیکیشنهای غیرمتمرکز(DApps) و قراردادهای هوشمند(smart contract) وجود داره، مدیریت کنن.
اگه که بهتازگی کار خودتون رو تو دنیای بلاکچین شروع کردین و دقیقاً، به این فکر میکنین که کدوم رو انتخاب کنین: هاردهت یا ترافل، پس جای درستی هستین!! تو پاراگهافهای زیر، در مورد هر دو چارچوب صحبت کردیم و بعدش اومدیم بین این 2 بزرگوار! یه مقایسۀ کوچیکی هم انجام دادیم.
HardHat
هاردهت یک محیط توسعۀ اتریوم برای توسعهدهندگانه بلاکچینه که وظایف متعددی رو اجرا میکنه. این ابزار به جز استقرار(دیپلوی) و اجرای تستها، چند ویژگی دیگه رو هم ارائه میده که اون رو خیلی قوی و منحصربهفرد میکنه. حالا تو این قسمت این ویژگیها رو یکبهیک بررسی میکنیم:
- شبکۀ هاردهت: هاردهت به طور فابریک! یک شبکۀ هاردهت داره که یک نود لوکال شبکۀ اتریومه و برای توسعهای طراحی شده است که ویژگیهای متعددی مانند پیامهای خودکار خطا، فورکینگ شبکۀ اصلی (mainnet forking) و حالتهای ماینینگ رو فراهم میکنه.بنابراین، اگه از هاردهت استفاده میکنین، به طور پیشفرض از شبکۀ هاردهت هم استفاده میکنین. این شبکه با هر تراکنش دریافتی، یک بلوک رو به طور منظم و بدون هیچ تأخیری استخراج میکنه.
- پلاگینها: در این بخش به سراغ پلاگینها میریم. پلاگینها، افزونههایی هستن که اونها رو میتونین تو برنامهها لود کنین تا کاراییشون بهبود پیدا کنه و یا ویژگی ها جدیدی به هاردهت اضافه کنه.تو بخش توسعه با هاردهت بیش از ۳۰ تا پلاگین وجود داره که به همین دلیل ازشون به عنوان ستون فقرات هاردهت هم یاد میشه. تو این قسمت چند مورد از محبوبترین این پلاگینها رو همراه با کاربردهاشون فهرستبندی کردیم:
- @nomiclabs/hardhat-ethers: این پلاگین به توسعهدهندگان امکان میده js رو تو محیط اجرای هاردهت (Hardhat Runtime Environment) تزریق کنن.
- @nomiclabs/hardhat-waffle: با استفاده از اون میتونین یک ارائهدهندة سازگار با وافل (Waffle-compatible provider) رو به محیط اجرای هاردهت اضافه کنین.
- @nomiclabs/hardhat-etherscan: قراردادهای اتراسکن (Etherscan) رو به طور خودکار تأیید میکنه.
- :hardhat-gas-reporter مقدار گاز مصرفی برای هر واحد تست (unit test) و میانگین مصرف گاز رو نشون میده.
- تست کردنهاردهت برای تست کردن قراردادهای هوشمند رویۀ بسیار سادهای رو ارائه میده که هنگام ایجاد این قراردادها، امکان نوشتن تستهای خودکار رو به توسعهدهنده ها میده. هاردهت برای آشنا کردن کاربرانش با روشهای تست نویسی، داکیومنت های بسیار عالی ای داره.اگه تو بخش تست نویسی هاردهت تازهوارد هستین، برای آشنایی بیشتر باهاش ایشالا بعداً مطالب بیشتری براتون آماده میکنم 😉
حالا بریم تو دنیای Truffle
ترافل هم مثل هاردهت یک محیط توسعه داره که مختص بلاکچین اتریوم(و البته بلاکچین های مبتنی بر EVM) هستش. ترافل چارچوب توسعۀ بسیار رایجیه و جامعه کاربری بزرگی داره ( البته لازم به ذکره که اخیراً استفاده از هاردهت در حال رواج بیشتره، علی الخصوص بخاطر قابلیت لاگ گرفتن از اسمارت کانترکت ها).
توسعهدهنده ها میتونن برای توسعۀ اپلیکیشنهای غیرمتمرکز از Truffle Suite استفاده کنن.
ترافل سوئیت ( از محصولات Consensys که از معتبرترین های حوزه بلاکچین هستش) اکوسیستمی برای توسعۀ Web3 است که از سه ابزار به نام ترافل، گاناش (Ganache) و دریزل (Drizzle) تشکیل شده است.
- ترافل: محیط توسعهایه که از EVM برای توسعۀ قراردادهای هوشمند استفاده میکنه.
- گاناش: ابزاریه که برای راه اندازی بلاکچین اتریوم لوکال روی سیستم خودمون استفاده میکنیم و میشه ازش برای دیپلوی و تست قراردادهای هوشمند استفاده کرد.
علاوه بر این، گاناش به توسعهدهنده ها امکان میده که در طول فرآیندهای توسعه جلوی پرداخت غیرضروری gas fee رو بگیرن.
- دریزل: مجموعهای از کتابخونههای فرانتاند (frontend) هستش که به عنوان مبنا، یک Redux store داره.
با استفاده از این ابزارها، توسعۀ فرانتاند خیلی خیلی آسونتر میشه.
از جمله ویژگی های ترافل میشه موارد زیر رو عنوان کنیم:
-
مدیریت قرارداد هوشمند:
ترافل به ما کمک میکنه تا artifact -های قراردادهای هوشمند را مدیریت کنیم، طوری که بتونیم بیشتر توجهمون رو به سایر بخشهای فرایند توسعه معطوف کنیم و همینطور زماون خیلی کمتری رو برای سازماندهی پروژه صرف کنیم.
-
مهاجرت و توسعۀ قابل اسکریپتنویسی:
با استفاده از ترافل میشه اسکریپتهای توسعه بنویسیم که به ما در پروسه های مختلف پروژه بلاکچینی مون کمک میکنن.
کنسول تعاملی قدرتمند:
ترافل دو کنسول مختلف رو برای کار با اسمارت کانترکت ها رو در اختیارمون میذاره.
(اولی) truffle console: یک کنسول تعاملی که با استفاده ازش میتونیم به نودهای اتریوم(یا سایر شبکه های مشابه) متصل بشیم. برای راهاندازی کنسول، از دستور truffle console استفاده میشه. هنگام لود کردن کنسول، صفحه کامندلاین ما بصورت زیر میشه:
به علاوه اینکه کنسول ترافل بهمون این امکان رو میده که با اسمارت کانترکت هامون ارتباط برقرار کنیم.
(دومی) Truffle Develop: یک کنسول دیگه اس کاملاً مشابه truffle console با این فرق که همزمان با راه اندازیش به ما یک بلاکچین آماده ی لوکال میده که با اون بتونیم کار خودمون رو انجام بدیم(توی هاردهت هم مشابه اش رو داریم که با نوشتن دستور hardhat node میشه بهش دسترسی پیدا کرد)
کافی است Truffle Develop را با استفاده از دستور truffle develop راهاندازی کنیم.
- داشبورد ترافل
اخیراً، ترافل یک داشبور معرفی کرده (Truffle Dashboard) که راه سادهتری برای استفاده از کیف پول متامسک (Metamask) فعلی برای استقرارها و تراکنشها ارائه میکنه. استفاده از داشبورد ترافل هم آسونه و هم اینکه از همون اول آمادۀ نصب و اجراست. از داشبورد ترافل میشه تو پروژه های هاردهت هم استفاده کرد. ترافل در خصوص داشبوردش هم داکیومنت هایی رو برای یادگیری و استفاده داره که میتونین مطالعه ش کنین.
حالا کدوم یکی قویتره؟
تو این قسمت چند مورد از ویژگیهای اونها رو مقایسه کرده و جواب نهایی سوالمون رو پیدا میکنیم.
- دیباگ کردن
حتماً میدونین که دیباگ کردن کدهای سالیدیتی (Solidity) کار سختیه. وقتی چیزی خراب میشه، فقط یک پیام خطا دریافت میکنیم، و بیشتر اوقات، دیباگ کردن اونچه خراب شده، ناجوره. البته که بعضی وقت ها هم ارورها کاملاً قابل درک هستن، اما خب کلاً دردسر داره.
خوشبختانه، هاردهت یک ویژگی به نام console.log برای سالیدیتی معرفی کرد که واقعاً کار با اسمارت کانترکت های سالیدیتی رو خیلی خیلی برامون راحت تر میکنه و هر لحظه میتونین ببینیم چه اتفاقی توی کدمون داره میفته (درست مثل زمانی که مثلاً داریم با جاوااسکریپت کد میزنیم و یه جایی مشکل میخوریم و خروجی دلخواهمون رو نمیگیریم که میایم لاگ میگیریم، و بعدش میفهمیم کجا رو داریم اشتباه میزنیم!)
تو هاردهت میشه به راحتی با ایمپورت کردن پلاگین console توی اسمارت کانترکتمون، از این ویژگی استفاده کنیم.
این هم بصورت تصویری:
دستور console.log رو توی فانکشن مورد نظر اضافه میکنیم:
و تامام!!
EVM ایجاد شده با هاردهت به طور خاص از این ویژگی پشتیبانی میکنه و ازاینرو بومیه Hardhat Node هستش. این ویژگی بهتنهایی یک خصوصیت فوق العاده حرفهای برای هاردهت هستش.
از سوی دیگه، ترافل سیستم دیباگ خودش رو بهبود داده و براش چند تا افزونه داره، اما خب کلاً به نظر، هاردهت ابزاری آسونتر و قویتر برای دیباگ کردن به نظر میرسه.
هاردهت به طور پیشفرض از ethersjs استفاده میکنه(که البته میشه اون را برای استفاده از Web3js تغییر داد). با اینحال، ترافل بطور پیشفرض از Web3js استفاده میکنه.
از Etherjs میتونین با ترافل نیز استفاده کنین، اما اجرای اون پیچیدهتر و سختتره.
درحالیکه ethers-js و web3-js مشابه هستن، هر روز که میگذره، تعداد توسعهدهنده هایی که از ethersjs به عنوان پیشفرض استفاده میکنن بهشدت در حال افزایشه.
- نود لوکال شبکه ی اتریوم
همونطور که پیشتر هم راجع بهش یه صحبتهایی کردیم، هاردهت همراه با خودش Hardhat Node را داره. با اینحال، برای توسعهدهندگان هیچ GUI ای نداره که بشه باهاش اطلاعات اکانت ها و تراکنش ها رو در هر لحظه به راحتی مشاهده کرد.
اما از طرف دیگه، ترافل از گاناش استفاده میکنه که به راحتی میشه جداگونه تنظیمش کرد. به علاوه اینکه هم نسخه دسکتاپ(با GUI) داره و هم نسخه ای که بصورت کامندلاین اجرا میشه(ganache-cli که البته اخیراً دیگه اسمش به همون ganache تغییر کرده).
اگه GUI رو ترجیح میدین، صد البته که باید گاناش رو انتخاب کنین.
- استقرار(دیپلوی یا مایگریت)
هاردهت برای استقرار یک کانترکت از اسکریپتهای اصلی جاوا اسکریپت استفاده میکنه؛ بنابراین، شروع با اون آسونتره و استفاده ازش هم نسبتاً ساده اس.
ترافل از یک روش استقرار مبتنی بر مهاجرت (که خودشون فایلهای js ، اما دارای ترتیب اجرای متوالی هستن) استفاده میکنه که برای یک شخص مبتدی کمی پیچیدهتره، اما میتونه تو درازمدت مفید باشه؛ توجه داشته باشید که نیازهای استقرارتون ممکنه در آینده تغییر بکنه.
اما از نظر سهولت دیپلوی کردن کانترکت، هاردهت قطعاً از همه بهتره.
- تست کردن
برای انجام تستهای مختلف، هم ترافل و هم هاردهت از کتابخونه ی Chai (Chai assertion library) و Mocha به عنوان فریمورک های آزمایشی خودشون استفاده میکنن، اما هاردهت وافل (waffle) رو هم داره. لازم به ذکره، وقتی نوبت به تست کردن اسمارت کانترکتها برسه، هر دو قوی هستن و جای نگرانی نیست.
- آمار
قبل از راهاندازی هاردهت، Web3 محبوبترین چارچوب برای تست کردن قراردادهای هوشمند بود.
اما الان به وضوح میشه دید که این روند در حال تغییره و هاردهت در مقایسه با ترافل محبوبیت بیشتری رو به دست آورده.
طبق آمار NPMJS، ترافل تقریباً ۳۰ هزار بار در هفته دانلود میشه و هاردهت حدود 120 هزار بار که تقریباً سه برابر ترافل هستش.
- در دسترسبودن پشتیبانی / کمک
جامعهGithub ترافل کاملاً فعال و البته بسیار مفید هستش، درحالیکه هاردهت یک سرور Discord برای پشتیبانی کامیونیتیه خودش ارائه میده. لازم به یادآوریه، همونطور که سابقاً گفتیم،ترافل توسط Consensys پشتیبانی میشه و ازاینرو میتونیم انتظار پشتیبانیه خوبی از سمت اون تیم رو داشته باشیم. هاردهت نیز از طریق سازمان Nomic Foundation مدیریت و توسعه داده میشه و یک سیستم پشتیبانی شگفتانگیز و به همون اندازه خوب از طریق سرور discord خودش داره.
خب خب خب …. این همه صحبت کردیم. در نهایت به عنوان نتیجهگیری کلی باید اینطور بگیم:
انتخاب بهترین گزینه از بین این 2 بزرگوار! واقعاً کار خیلی سختیه. انتخاب ترافل یا هاردهت به اولویتها و موارد کاربرد هر شخص بستگی داره، چون هر جفتشون، ابزارهایی بسیار قدرتمند هستن و کار باهاشون بسیار لذت بخشه.
توصیه اکید میکنیم که اگه تو مسیر برنامه نویسی حوزه بلاکچین تازهکار هستین، بهترین کار اینه که حتماً هر دوتاشون رو بررسی کنین و ببینید کدومشون به قولی بیشتر راه دستتونه، و با کدومشون بیشتر ارتباط برقرار میکنین. اینجوری میشه تصمیم گرفت که کدوم یکی براتون بهترین گزینه است.
مرسی که با ما تو آکادمی بلاکچین توکن خان همراه هستین.
امیدوارم این مطلب تونسته باشه اطلاعاتی در مورد این ابزارهای توسعه بر بستر بلاکچین بهتون داده باشه و کمکی(هر چند ناچیز) در فرآیند یادگیری و ورودتون به دنیای برنامه نویسی بلاکچین بهتون کرده باشه.
خوشحال میشیم اگر این مطلب رو دوست داشتین، با دوستاتون هم به اشتراک بذارینش.
ضمناً از دوره های آموزشی آکادمی توکن خان هم دیدن کنین.
مطالب زیر را حتما مطالعه کنید
بررسی رفتار توابع View و Pure در سالیدیتی Solidity
توابع Payable در قراردادهای هوشمند Solidity
سالیدیتی Solidity چیست؟
سطح دسترسی Visibility در سالیدیتی Solidity
توابع Function در سالیدیتی Solidity
انواع حافظه در قرارداد هوشمند سالیدیتی
8 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
مطلب بی نظیری بود
من یکی از کاربران دائمی سایت شما هستم
ایا مشاوره هم دارین برای خرید ارز؟ قیمت مشاورتون چقدره؟
این مطلب حرف نداشت
خیلی سایت خوبی دارین
خیلی دنبال این موضوع بودم
مطلب به درد بخوری بود
احسنت عالی بود