چطور یک قرارداد هوشمند با سالیدیتی بنویسیم

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

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

بهزاد میرزازاده بهزاد میرزازاده

زمان مطالعه

3 دقیقه

بازدید

146

پرسش و پاسخ

0
چطور یک قرارداد هوشمند با سالیدیتی بنویسیم

قرارداد هوشمند چیست؟

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

کاربرد قراردادهای هوشمند؟ اصلا مزایای استفاده از smart contracts  چیه ؟

  • سرعت، کارایی و دقت
    پس از وارد شدن دیتا از شرایط مطرح شده از  قرارداد، قرار داد همون لحظه اجرا می شود. خب همانطور که گفتیم یک قرار داد الکتروترونیکی (دیجیتال ) است ؛ در نتیجه نیازی به  هیچ کاغذی برای پردازش وجود ندارد و زمان صرف شده برای تطبیق خطاهایی که اغلب از پر کردن دستی اسناد ناشی می‌شوند، وجود ندارد.
  • اعتماد و شفافیت متن قرارداد
    از آنجا که هیچ شخص ثالثی در کار نیست، و از آنجا که سوابق رمزگذاری شده تراکنش‌ها بین شرکت‌کنندگان در قرارداد به اشتراک گذاشته می‌شود، نیازی به این سؤال نیست که آیا اطلاعات برای منافع شخصی تغییر داده شده است یا خیر
  • امنیت بالا
    سوابق تراکنش های بلاک چین رمزگذاری شده است، که فرایند هک در آنها را بسیار سخت می کند. علاوه بر این، از آنجا که هر رکورد به رکوردهای قبلی و بعدی در یک دفتر کل توزیع شده متصل است، هکرها باید کل زنجیره را تغییر دهند تا یک رکورد را تغییر دهند. ( پس عملا احتمال هک شدن تراکنش قرار داد به 10 درصد کاهش پیدا میکند)
  • پس انداز
    قراردادهای هوشمند نیاز به واسطه‌ها را برای رسیدگی به تراکنش‌ها و در نتیجه تاخیرهای زمانی و کارمزدهای مرتبط با آنها را برطرف می‌کند.

 

یکی از زبان هایی که لازم داریم برای این فرایند زبان سالیدتی است. 

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

اولین قرارداد هوشمند شما

حالا بیایید یک قرارداد هوشمند ساده بنویسیم. این قرارداد به ما این امکان را می دهد که یک عدد صحیح بدون علامت را ذخیره کرده و آن را بازیابی کنیم.

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.0 <0.7.0;
contract SimpleStorage {
    uint storedData;
    function set(uint x) public {
        storedData = x;
    }
    function get() public view returns (uint) {
        return storedData;
    }
}

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

خط 1: تعیین نوع مجوز SPDX، که پس از Solidity ^0.6.8 اضافه شده است. هر زمان که کد منبع یک قرارداد هوشمند در دسترس عموم قرار می گیرد، این مجوزها می توانند به حل یا جلوگیری از مشکلات حق چاپ کمک کنند. اگر نمی‌خواهید هیچ نوع مجوزی را مشخص کنید، می‌توانید از یک مقدار ویژه UNLICENSED استفاده کنید یا به سادگی از کل نظر رد شوید (این منجر به خطا نمی‌شود، فقط یک هشدار است).

خط 2: در خط اول ما اعلام می کنیم که از کدام کامپایلر Solidity می خواهیم استفاده کنیم. به عنوان مثال، ما هر نسخه ای بین ≥ 0.4.0 و <0.7.0 را استفاده کرده ایم.

خط 3: ما در اینجا قرارداد خود را اعلام می کنیم و نام آن را به عنوان Simplestorage می گذاریم. این قرارداد در نام فایل SimpleStorage.sol ذخیره می شود (sol پسوند فایل برای قراردادهای هوشمند solidity است).

خط 4: ما یک متغیر uint (عدد صحیح بدون علامت) به نام storedData را اعلام می کنیم، این متغیر برای ذخیره داده ها استفاده می شود.

خط 5-7: سپس یک تابع set اضافه می کنیم که با استفاده از آن مقدار متغیر storeData خود را تغییر می دهیم. در اینجا تابع set یک پارامتر x را می پذیرد که مقدار آن را در storeData ذخیره می کنیم. علاوه بر این، تابع به عنوان عمومی علامت گذاری شده است، به این معنی که تابع می تواند توسط هر کسی فراخوانی شود.

خط 8-10: یک تابع get برای بازیابی مقدار متغیر storeData اضافه می کنیم. این تابع به عنوان view علامت گذاری شده است که به کامپایلر Solidity می گوید که این یک تابع فقط خواندنی است.

به غیر از آن تابع get نیز دارای بازگشت (uint) است، به این معنی که تابع یک uint برمی گرداند.

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