مشخصات مقاله
قرارداد در سالیدیتی
قرارداد در Solidity مشابه کلاس C++ است. یک قرارداد دارای ویژگی های زیر است:
Constructor
یک تابع ویژه اعلام شده با کلمه کلیدی سازنده که یک بار در هر قرارداد اجرا می شود و هنگام ایجاد قرارداد فراخوانی می شود
State Variables
متغیرهای هر قرارداد برای ذخیره وضعیت قرارداد به کار می روند.
Functions
توابع در هر قرارداد که می تواند متغیرهای حالت را برای تغییر وضعیت یک قرارداد تغییر دهد.
کمیت های Visibility
در ادامه، کمیت های مختلف Visibility برای توابع یا متغیرهای State قرارداد، بیان شده است.
External
توابع خارجی به این منظور هستند که توسط قراردادهای دیگر فراخوانی می شوند. آنها نمی توانند برای فراخوانی داخلی استفاده شوند.در این حالت استفاده از ()Function_name لازم است. متغیرهای State را نمی توان به عنوان توابع خارجی مشخص کرد.
Public :
توابع و متغیرهای عمومی را می توان هم به صورت خارجی و هم به شکل داخلی استفاده کرد. برای متغیر Public State، Solidity به طور خودکار یک تابع گیرنده (getter) ایجاد می کند.
Internal :
توابع و متغیرهای داخلی فقط می توانند به صورت درون قرارداد یا توسط قراردادهای مشتق شده استفاده شوند.
Private :
توابع ومتغیرهای خصوصی فقط در داخل و حتی در قراردادهای مشتق شده قابل استفاده هستند.
pragma solidity ^0.5.0; contract C { //private state variable uint private data; //public state variable uint public info; //constructor constructor() public { info = 10; } //private function function increment(uint a) private pure returns(uint) { return a + 1; } //public function function updateData(uint a) public { data = a; } function getData() public view returns(uint) { return data; } function compute(uint a, uint b) internal pure returns (uint) { return a + b; } } //External Contract contract D { function readData() public returns(uint) { C c = new C(); c.updateData(7); return c.getData(); } } //Derived Contract contract E is C { uint private result; C private c; constructor() public { c = new C(); } function getComputedResult() public { result = compute(3, 5); } function getResult() public view returns(uint) { return result; } function getData() public view returns(uint) { return c.info(); } }