mjavadasadi.ir

0 %
محمدجواداسدی
توسعه دهنده وب
  • محل سکونت:
    کرمان
  • شهر:
    کرمان
  • شماره تماس :
    09130494064
html
CSS
java script
(PWA)Progressive Web App
WORDPRESS
react
react-native
NFT
crypto
PHP
  • photoshop
  • xd

آموزش نوشتن قراردادهای سالیدیتی (Solidity) با استفاده از ترافل

۱۴ اردیبهشت ۱۴۰۰

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

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

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

در این مقاله به سه نکته خاص خواهیم پرداخت:

۱. استفاده از صبر (await) و ناهمزمانی (async) در مقابل وعده ها (promise)

۲. ایجاد محیط مشترک برای انجام چندین آزمایش

۳. ضمیمه کردن آزمایش ها در سایر آزمایش ها

استفاده از این نکات می‌تواند به کاهش مقدار بسیار زیادی کپی کردن کد در آزمایش شما کمک کند و آزمایش های خواندنی تری بنویسید.

استفاده از صبر (await) و ناهمزمانی (async) در مقابل وعده ها (promise) در Solidity

ترافل (Truffle) همراه با چند آزمایش ارائه می‌شود و هر آزمایش شامل چندین سرفصل تکرارشونده است و از وعده ها استفاده می‌کند.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

این مجموعه آزمایش ها اساسا کرافت (cruft یا کد بد طراحی شده، به صورت غیرضروری پیچیده یا ناخواسته) می‌باشند. در ادامه به این موضوع می‌پردازیم که اگر آزمایش با ناهمزمانی و صبر مجدد نوشته شود چگونه خواهد بود.

 

 

 

 

 

 

 

 

 

 

 

 

 

می‌توانید مشاهده کنید که با تبدیل تابع آزمایش به تابع ناهمزمانی و سپس صبر برای تمام مقادیر مورد نیاز تا چه حد می‌توان در کدنویسی صرفه جویی کرد. بنابراین نیازی به نوشتن توابع برای مدیریت هر وعده قرارداد ترافل (Truffle) نداریم.

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

 

 

 

 

 

هر uint256 بازگشته از سالیدیتی به جاوا اسکریپت یک شی از نوع BigNumber است و قابل تبدیل به عدد یا رشته می‌باشد.

ایجاد محیط مشترک برای انجام چندین آزمایش

ترفند مفید دیگر ، ایجاد محیط مشترکی از متغیرهایی است که می‌خواهید در چندین آزمایش در چندین قرارداد استفاده کنید.

نحوه تنظیمات اولیه ترافل (Truffle) این موضوع را بلافاصله مشخص نمی‌کند و به بررسی دقیق تر برای یافتن رویکرد صحیح نیاز است.

ترافل (Truffle) اینگونه آزمایش را ایجاد می‌کند:

 

 

 

 

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

در دستور زیر ، اصلاح بر روی اجرای آزمایشی را مشاهده می‌کنیم که دارای اکسپورت یا انتقال می‌باشد و محیط JSON را در فایل جدیدی به اسم shared.js قرار می‌دهد:

 

 

 

 

 

 

 

 

اکنون تابع آزمایش بسیار خوبی داریم که ناهمزمان است و شامل شی محیطی با مثال قرارداد ما می‌باشد. این تابع اجرای قرارداد ترافل (Truffle) ما را به تاخیر می‌اندازد و می‌توانیم مثال مورد استفاده را داخل سایر قراردادها قرار دهیم:

 

 

 

 

 

 

 

 

 

 

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

 

 

هم چنین می‌توانید چندین متغیر دیگر در فایل shared.js قرار دهید. در آزمایش های قرارداد شما، صرفا از واگذاری برای متغیرها استفاده کنید. هم چنین برای آسانتر شدن کارها، متغیرها را در حوزه تابع اصلی اجرا کننده آزمایش حفظ کردیم تا تمام آزمایش ها به آن دسترسی داشته باشند.

چرا ورود متغیرهایی نظیر meta به قراردادهای MetaCoin در آزمایش های بدین گونه است؟ این امر، هر آزمایش را به شدت ساده می‌کند در غیر این صورت باید دستور زیر را فراخوانی کنید:

 

 

شاید بعضی افراد این موضوع را نپسندند اما این رویکرد تاکنون عملکرد خوبی داشته است.

ضمیمه کردن آزمایش ها در سایر آزمایش ها

این نکته اساسا مشابه با اصلاح تجزیه تابع اجرا کننده آزمایش از قرارداد ترافل (Truffle) موجود در shared.js‌ می‌باشد. برای MetaCoin این نکته به صورت زیر می‌باشد:

 

 

سپس از این مورد در قرارداد دیگری استفاده می‌کنید:

 

 

 

 

 

به خاطر داشته باشید که اجرا کننده واقعی قرارداد، ناهمزمان نیست:

 

 

 

هرچند تمام آزمایش شما می‌تواند به صورت زیر، ناهمزمان شود:

 

 

 

 

با استفاده از این نکات می‌توانید آزمایش های کوچکی بنویسید که منجر به قراردادهای هوشمند ایمن و بسیار خوبی شوند.

ارسال شده در ارز دیجیتال, مطالب آموزشیبرچسپ ها:
یک دیدگاه بنویسید

© تمامی حفوق برای محمدجواد اسدی میباشد
ایمیل: info@mjavadasadi.ir
تلفن تماس :09130494064