Benyamin Abbasi
Benyamin Abbasi
خواندن ۸ دقیقه·۴ سال پیش

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

مروری بر Solidity

سالیدیتی یک زبان برنامه نویسی برای نوشتن قراردادهای هوشمند روی شبکه بلاکچین اتریوم می باشد. این زبان یک ساختار قرارداد-محور دارد، که یعنی قراردادهای هوشمند مسئولیت ذخیره سازی تمامی منطق برنامه نویسی شده را با تراکنش های بلاکچین دارند. این زبان یک زبان برنامه نویسی high-level است که شباهت بسیاری به زبانی هایی مانند جاوا اسکریپت، پایتون و ++C دارد. این زبان یک هدف اصلی را دنبال می کند و آن هم پیاده سازی روی ماشین مجازی اتریوم یا Ethereum Virtual Machine است که به صورت EVM خلاصه می شود. این ماشین مجازی روی نود (Node) های اتریوم هاست شده و از این طریق به شبکه بلاکچین اتریوم وصل می شود.

این زبان به صورت استاتیک نوشته شده و قابلیت هایی مثل موروثی بودن (inheritance)، کتابخانه ها و خیلی موارد دیگر رو شامل می شود. به طور خلاصه تمامی قابلیت ها و ظرفیت های مورد نیاز برای یک نرم افزار بلاکچینی را دارد.

تصویر IDE Remix متعلق به شبکه اتریوم
تصویر IDE Remix متعلق به شبکه اتریوم


در این دوره آموزشی از محیط توسعه Remix برای نوشتن کدها استفاده می کنیم. رمیکس یک IDE برپایه Browser است که به شما اجازه نوشتن، کامپایل کردن و پیاده سازی قراردادهای هوشمند را دارد. علاوه بر این فیچرهای مختلفی مثل ذخیره فایل را هم داراست.

با استفاده از Remix ما نیازی به نصب برنامه یا ابزارهای توسعه ای نداریم. می توانید با باز کردن همزمان Remix در تب دیگری این دوره را دنبال کنید.

https://remix.ethereum.org/

کد سالیدیتی را با باز کردن یک فایل شروع می کنید. شما می توانید از سمت چپ بالای صفحه فایل جدیدی را باز کنید.


فایل با عنوان MyContract.sol را ایجاد کنید. در خط اول این فایل، نسخه سالیدیتی که می خواهیم از آن استفاده کنیم را وارد می کنیم:

pragma solidity ^0.4.24;

در این مرحله قرارداد هوشمد را به شکل زیر می نویسیم:

pragma solidity ^0.4.24; contract MyContract { // ... }

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

اکنون می توانیم توسعه قرارداد هوشمند را ادامه بدیم. اول از همه، ما یک Storage ساده قرارداد هوشمند را برنامه ریزی می کنیم، تا با استفاده از آن بتوانیم:

  • داده ها را ذخیره کنیم
  • داده ها را بازخوانی کنیم

با ساخت یک رشته داده در قرارداد هوشمند شبیه این تصویر شروع می کنیم و با متغیری به اسم value شروع می کنیم. سالیدیتی یک زبان استاتیک است، برای همین باید در ابتدا نوع متغیر را در زمان تعریف کردن آن مشخص کنیم:

pragma solidity ^0.4.24; contract MyContract { string value; }

این متغیر "state variable" نامیده می شود چون دقیقا داده را روی بلاکچین حفظ می کند. هز زمان که داده ای را به این متغیر تخصیص بدیم، رشته ای روی شبکه بلاکچین ثبت می شود. دقت کنیم که این داده روی Storage ذخیره می شود نه روی حافظه (Memory). این متغیر ویژگی دیگری هم دارد، توسط تمام قرارداد هوشمند قابل دسترس است، برعکس local variable هایی که فقط درون function شناسایی می شوند و داده ها را عملکرد function ذخیره نمی کنند، این نوع از متغیر رفتاری کاملا بلاکچینی دارد. در ادامه این دوره مثال های بیشتری را با هم مرور خواهیم کرد.

اکنون می توانیم یک function برای بازخوانی داده ذخیره شده بسازیم. در این مرحله function با نام get() تعریف می کنیم:

function get() { // ... }

حالا داده دریافت شده را از State متغیر با استفاده از return بازخوانی می کنیم:

function get() { return value; }

اکنون باید شفافیت یا "visibility" این function را در وضعیت public قرار دهیم تا هر کسی در شبکه بلاکچین بتواند آن را صدا کند (نه فقط خود قرارداد هوشمند):

function get() public view { return value; }

در انتها، ما نوع داده برگشتی را در حالت string برای function مشخص می کنیم:

function get() public view returns(string) { return value; }

عالی! حالا باید روشی داشته باشیم که این داده را از قرارداد هوشمند بازخوانی کنیم. در ادامه شما می بینید که چطور این فرآیند کامپایل را انجام می دهیم، ولی قبل از آن باید راهی برای تعریف این داده خارج از قرارداد هوشمند بسازیم. به همین منظور function ای با نام set مانند شکل زیر تعریف می کنیم:

function set(string _value) public { // ... }

به همین سادگی function ساختیم که argument با نام _value و از نوع string دارد. این function علاوه بر اینکه به طور عمومی دیده می شود، توسط تمامی افراد شبکه بلاکچین هم قابل بازخوانی است. حالا به طور عملی می توانیم value قرارداد هوشمند را به شکل زیر به روز رسانی کنیم:

function set(string _value) public { value = _value; }

در اینجا به شکل خیلی ساده داده را از طریق _valueدریافت کرده و به وضعیت متغیر value نسبت دادیم. دقت کنید که _value توسط یک زیرخط (underline) به سادگی به یک متغیر local تبدیل شده است. این روش تبدیل کردن در زبان سالیدیتی بسیار رایج است.

اکنون می توانیم داده ای را به صورت پیش فرض برای وضعیت متغیر value تعریف کنیم. می توانیم این کار را درون constructor function خود قرارداد هوشمند به شکل زیر انجام دهیم:

constructor() public { value = &quotmyValue&quot }

در ابتدا باید constructor function با عنوان constructor ایجاد کنیم. این function فقط یک بار اجرا شده و دقیقا زمانی که قرارداد هوشمند پیاده سازی می شود. علاوه بر این همیشه باید شفافیت public را داشته باشد.

در این مرحله کد ما کامل شده است. با کامپایل کردن و deploy کردن این قرارداد هوشمند آن را تست می کنیم. اول از همه ما نسخه compiler را تعریف می کنیم که در سمت راست browser قرار دارد. به طور مثال نسخه 0.4.25 را برای کامپایل این کد انتخاب کنید.

اکنون، محیط مورد نظر را انتخاب می کنیم. به شخصه JavaScript virtual machine را انتخاب میکنم، که به من امکان یک محیط شبیه سازی شده درون browser را می دهد.

اکنون می توانیم به سادگی و با یک کلیک کد را deploy کنیم:

عالی! شما اولین قرارداد هوشمند خود را پیاده کردید. با بازخوانی function های زیر شما می توانید با مطابق با فرم هایی که تولید می شود با قرارداد هوشمند تعامل داشته باشید.

در ابتدا، داده را بازخوانی کنیم. با کلیک گردن روی عملگر get() این اتفاق رخ می دهد. شما باید داده پیش فرض"myValue"که در constructor تعریف شده بود را ببینید.

اکنون می توانیم عملگر set()را با داده جدید آپدیت کنیم. داده جدیدی را در فیلد فرم وارد کنید و حتما آن را با quotation وارد کنید مانند: "New Value"

اکنون کد را اجرا کنید و داده جدید را بخوانید، باید به "New Value"تغییر کرده باشد.


ممکن است که به پنجره تراکنش که زیر text editor وجود دارد هم دقت کرده باشید. این لیست کاملی از تمامی تراکنش هایی است که در این بلاکچین مجازی Virtual blcokchain وجود دارد. به یاد داشته باشیم، شبکه بلاکچین اتریوم از اتصال رکوردهایی با عنوان بلاک ها که به هم زنجیر شده اند ایجاد شده که یک دفترکل توزیع شده عمومی را ایجاد کند. واحد پایه همه این بلاک ها تراکنش ها هستند.

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

منبع اصلی: https://www.youtube.com/channel/UCY0xL8V6NzzFcwzHCgB8orQ

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