برنامه نویسی

شروع با Solidity، همه آنچه که باید بدانید (راهنمای گام به گام).

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

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

شروع شدن

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

  • یک محیط توسعه مانند Remix یا Hardhat: Remix یک IDE آنلاین است که به شما امکان می دهد کد Solidity را در مرورگر خود بنویسید و آزمایش کنید، در حالی که Hardhat یک محیط توسعه محلی است که به شما کنترل بیشتری بر روند توسعه خود می دهد.

  • یک ویرایشگر متن: این می تواند هر ویرایشگر متنی باشد، مانند Visual Studio Code، Atom یا Sublime Text.

  • کیف پول اتریوم: برای استقرار قراردادهای هوشمند خود در بلاک چین، باید کیف پول اتریوم داشته باشید. کیف پول های مختلفی از جمله MetaMask و MyEtherWallet موجود است.

  • کامپایلر Solidity: برای کامپایل کد خود به بایت کدی که می تواند در ماشین مجازی اتریوم (EVM) اجرا شود، به یک کامپایلر Solidity نیاز دارید. محبوب ترین کامپایلر کامپایلر solc است.

ساختار پایه

قرارداد Solidity مجموعه ای از توابع و داده هایی است که می توانند در بلاک چین اتریوم مستقر شوند. در اینجا یک نمونه از یک قرارداد ساده Solidity آورده شده است:

pragma solidity ^0.8.0;

contract MyContract {
    uint256 myVariable;

    function set(uint256 _myVariable) public {
        myVariable = _myVariable;
    }

    function get() public view returns (uint256) {
        return myVariable;
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هی، جوجه نکش! این را با هم توضیح می دادیم و مرور می کردیم. باحال!

در این قرارداد، یک متغیر حالت myVariable، set، get وجود دارد.

این کد Solidity یک قرارداد هوشمند با یک متغیر عدد صحیح بدون امضا به نام myVariable ایجاد می کند که دارای دو عملکرد set و get است. تابع set آرگومان _myVariable را می گیرد و مقدار myVariable را برای آن تنظیم می کند. تابع get مقدار فعلی myVariable را برمی گرداند. دستور pragma نسخه کامپایلر Solidity را مشخص می کند.

باحال درسته؟ این فقط مقدمه است، بیایید مستقیماً به انواع داده ها در حالت جامد شیرجه بزنیم.👨‍🍳

انواع داده ها

در اینجا برخی از انواع داده ها در Solidity با مثال توضیح داده شده است

  • بوول
    : یک مقدار بولی که می تواند درست یا نادرست باشد. مثلا:
bool myBool = true;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

and uint: اینها انواع عدد صحیح هستند که int می تواند مقادیر منفی را ذخیره کند و uint فقط می تواند مقادیر مثبت را ذخیره کند. عدد بعد از نوع، تعداد بیت‌هایی را که برای نمایش مقدار استفاده می‌شوند، تعیین می‌کند. مثلا:

int8 myInt8 = -123;
uint16 myUint16 = 12345;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

: این یک متغیر 20 بایتی است که برای ذخیره آدرس های اتریوم استفاده می شود. مثلا:

address myAddress = 0x1234567890123456789012345678901234567890;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • رشته
    : برای ذخیره مقادیر رشته پویا استفاده می شود. مثلا:
string myString = "Hello, world!";
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

: برای ذخیره آرایه های بایت استفاده می شود. مثلا:

bytes myBytes = hex"0011223344556677";
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

: ساختار یک نوع ترکیبی سفارشی تعریف شده است که متغیرهای دیگر را گروه بندی می کند. مثلا:

struct Person {
    string name;
    uint age;
}

Person myPerson = Person("Alice", 25);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

: شمارش یک نوع سفارشی تعریف شده است که مجموعه ای از ثابت های نامگذاری شده را تعریف می کند. مثلا:

enum Color { RED, GREEN, BLUE }
Color myColor = Color.RED;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

mapping(address => uint256) balances;
balances[0x1234567890123456789012345678901234567890] = 100;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

: یک آرایه برای ذخیره مجموعه ای از مقادیر از همان نوع استفاده می شود. مثلا:

uint256[] myArray = [1, 2, 3];
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اینها تنها برخی از انواع داده های اساسی موجود در Solidity هستند. انواع تخصصی تری مانند اعداد نقطه ثابت، آرایه های چند بعدی و موارد دیگر وجود دارد که می توانید با غوطه ور شدن در برنامه نویسی Solidity در مورد آنها بیاموزید.

بعدی، توابع!✨

کارکرد

توابع جزء ضروری Solidity هستند که به توسعه دهندگان این امکان را می دهند تا رفتار و عملکرد قراردادهای هوشمند را تعریف کنند. ما چند مثال کلیدی از توابع در Solidity را مرور می کنیم:

تعریف عملکرد عمومی:

pragma solidity ^0.8.0;

contract MyContract {
    uint256 myVariable;

    function set(uint256 _myVariable) public {
        myVariable = _myVariable;
    }

    function get() public view returns (uint256) {
        return myVariable;
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال دو تابع set و get را تعریف می کنیم. تابع set یک تابع عمومی است که مقدار myVariable را تعیین می کند، در حالی که تابع get یک تابع نمای عمومی است که مقدار myVariable را برمی گرداند.

تعریف تابع خصوصی:

pragma solidity ^0.8.0;

contract MyContract {
    uint256 myVariable;

    function set(uint256 _myVariable) public {
        myVariable = _myVariable;
        doSomething();
    }

    function doSomething() private {
        // Do something here
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

تعریف تابع خارجی:

pragma solidity ^0.8.0;

contract MyContract {
    function doSomething() external {
        // Do something here
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به همین ترتیب! در این مورد، یک تابع خارجی doSomething را تعریف می کنیم. توابع خارجی را فقط می توان از خارج از قرارداد فراخوانی کرد و نه از درون خود قرارداد.

تعریف تابع داخلی:

pragma solidity ^0.8.0;

contract MyContract {
    uint256 myVariable;

    function set(uint256 _myVariable) public {
        myVariable = _myVariable;
        doSomething();
    }

    function doSomething() internal {
        // Do something here
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

رویدادهای بعدی!✨

مناسبت ها

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

در اینجا مثالی از نحوه ایجاد و انتشار یک رویداد در Solidity آورده شده است:

pragma solidity ^0.8.0;

contract MyContract {
    event MyEvent(uint256 indexed id, string message);

    function doSomething(uint256 id, string memory message) public {
        // perform some action here

        emit MyEvent(id, message);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، ما یک رویداد به نام MyEvent با دو پارامتر تعریف می کنیم: id (یک عدد صحیح بدون علامت با یک شاخص) و پیام (یک رشته). در تابع doSomething، عملی را انجام می دهیم و سپس رویداد را با مقادیر مناسب منتشر می کنیم.

برای گوش دادن و پاسخ به رویدادها در قرارداد یا برنامه دیگری، می‌توانید از کتابخانه web3.js یا ابزاری مشابه استفاده کنید. در اینجا مثالی از نحوه گوش دادن به رویدادهای منتشر شده توسط قرارداد فوق با استفاده از web3.js آورده شده است:

const myContract = new web3.eth.Contract(contractABI, contractAddress);

myContract.events.MyEvent({ filter: { id: 123 } })
    .on('data', function(event) {
        console.log(event.returnValues.message);
    })
    .on('error', console.error);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این کد یک نمونه جدید از MyContract با استفاده از ABI و آدرس قرارداد ایجاد می کند. سپس به رویداد MyEvent با شناسه 123 گوش می دهد و هنگام راه اندازی رویداد، پیام مربوطه را در کنسول ثبت می کند. اگر خطایی رخ دهد، به کنسول نیز وارد می شود.

به طور کلی، رویدادها روشی قدرتمند برای برقراری ارتباط بین بخش‌های مختلف یک برنامه غیرمتمرکز یا حتی بین برنامه‌های مختلف در شبکه اتریوم هستند.

نتیجه

تبریک می‌گوییم، شما اولین قدم‌های خود را با موفقیت در دنیای هیجان‌انگیز Solidity برداشتید! با داشتن دانش ساختار پایه، انواع داده ها، توابع و رویدادها، آماده شروع ساختن روی بلاک چین اتریوم مانند یک حرفه ای هستید. آماده باشید تا دوستان و خانواده خود را با مهارت های جدید خود در نوشتن قراردادهای هوشمند شگفت زده کنید – چه کسی می داند، حتی ممکن است ویتالیک بوترین بعدی شوید!🧖‍♂️(تخیل)

این فقط یک راهنمای مقدماتی برای Solidity است، اما از غواصی عمیق و گسترش دانش خود نترسید! با زبان دوست شوید، اسناد را بخوانید، سعی کنید یک Dapp کوچک بسازید و شاید حتی چیز بزرگ بعدی را در بلاک چین ایجاد کنید.

ارجاع

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

تا دفعه بعد، کاوش مبارک!

به سلامتی،

وینیل-داویل.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا