قراردادهای هوشمند نیاز به برنامه نویسی دارند و Solidity ابزاری برای این کار است.
Solidity از زمانی که برای اولین بار در سال 2014 پیشنهاد شد و بعدتر توسط تیم Solidity اتریوم توسعه یافت، مسیری طولانی را طی کرده است. صدها هزار توسعهدهنده وجود دارند که از این زبان برنامه نویسی به منظور ایجاد سرویسهای مبتنی بر بلاک چین برای موارد استفاده متعددی می کنند.
این مقاله به شما توضیح میدهد که Solidity چیست و چگونه در اکوسیستم اتریوم استفاده میشود. اگر علاقه مند به یادگیری بیشتر در مورد عملکرد درونی این زبان برنامه نویسی مبتنی بر بلاک چین هستید، این مقاله برای شما مناسب است.
Solidity چیست؟
Solidity یک زبان برنامه نویسی شی گرا و سطح بالا است که برای ایجاد قراردادهای هوشمندی استفاده می شود که تراکنش های روی بلاک چین را خودکار می کنند. پس از ارائه اولیه آن در سال 2014، این زبان توسط مشارکت کنندگان پروژه اتریوم توسعه یافت. این زبان در اصل برای ایجاد قراردادهای هوشمند در بلاک چین اتریوم و ایجاد قراردادهای هوشمند در سایر بلاک چین ها استفاده می شود.
Solidity شبیه به یکی از رایج ترین زبان های برنامه نویسی، جاوا اسکریپت است. می توان آن را به عنوان یک گویش محلی از جاوا اسکریپت در نظر گرفت. این به این معنی است که اگر به جاوا اسکریپت مسلط هستید، می توانید به راحتی از Solidity استفاده کنید. Solidity همچنین ویژگی های مشابهی با زبان های برنامه نویسی C++ و Python دارد.
به عنوان یک زبان سطح بالا، Solidity نیاز به تایپ کدهای صفر و یک را برطرف میکند. برنامه نویسی با مجموعهای از حروف و اعداد، این کار را برای انسانها بسیار قابل فهمتر و آسانتر میکند.
نحوه کار Solidity
Solidity با پشتیبانی از وراثت (inheritance)، کتابخانهها و انواع پیچیده تعریف شده توسط کاربر به صورت ایستا (static) تایپ می شود. همانطور که Solidity به صورت ایستا تایپ می شود، کاربر هر متغیر را به طور دقیق مشخص می کند. Data type ها به compiler اجازه میدهد تا استفاده صحیح از متغیرها را بررسی کند. Data type های Solidity معمولاً به عنوان Value type ها یا Reference type ها طبقهبندی میشوند.
تفاوت اصلی بین Value type ها و Reference type ها را می توان در نحوه تخصیص آنها به یک متغیر و ذخیره آنها در EVM (ماشین مجازی اتریوم) یافت. در حالی که تغییر مقدار(Value) در یک متغیر Value type بر مقدار متغیر دیگر تأثیر نمیگذارد، هر کسی که به مقادیر تغییر یافته در متغیرهای Reference type مراجعه می کند ممکن است مقادیر بهروزشده را دریافت کند.
Solidity چگونه کار میکند؟
زیبایی اکوسیستم اتریوم این است که بسیاری از ارزهای دیجیتال مختلف و برنامههای غیرمتمرکز می توانند از آن استفاده کنند. قراردادهای هوشمند امکان ایجاد فناوریهای منحصر به فرد در اتریوم را برای انواع کسب و کارها و سازمان ها فراهم می کند.
هر سال، جهان میلیاردها دلار برای راه حلهای بلاک چین خرج میکند. بسیاری از این راه حلها با استفاده از Solidity ایجاد میشوند. قراردادهای هوشمند ساخته شده با استفاده از Solidity را می توان راهی برای خودکارسازی فرآیندهای تجاری و غیرتجاری بین افراد مختلف در نظر گرفت. این تضمین می کند که افرادی که تراکنش های خود را روی بلاک چین انجام می دهند، نگران خطراتی مانند کلاهبرداری یا عدم امکان استفاده از همان ارز نباشند.
یکی از اجزای کلیدی که اجرای کد Solidity را ممکن می کند EVM است. EVM به عنوان یک کامپیوتر مجازی روی بلاک چین توصیف می شود که ایده های افراد را به کدی تبدیل می کند که اپلیکیشنها را روی بلاک چین اجرا میکند.
در پشت صحنه ماجرا، Solidity کدی در سطح ماشین ایجاد می کند که در EVM اجرا می شود. یک compiler برای شکستن کدهای سطح بالای قابل خواندن توسط انسان استفاده می شود، که به دستورالعملهایی تبدیل میشود که پردازنده میخواند. پلتفرمهای مختلف، کامپایلر Solidity را به صورت رایگان ارائه میکنند، از جمله کامپایلر آنلاین Remix و یک کامپایلر command-like دانلود شده در PC.
قراردادهای هوشمند EVM محدودیتهایی دارند که باید برطرف شوند. یکی از مهمترین آنها دسترسی محدود به توابع کتابخانهای مفید برای تجزیه ساختارهای JSON یا floating-point شناور است.
توابع عمومی و خصوصی
توابع عمومی مشابه API هایی هستند که هر کسی در جهان ممکن است به آنها دسترسی داشته باشد. هر کسی میتواند آنها را در کد خود فراخوانی کند. توابع عمومی، در بسیاری از موارد، برای فرآیندهای مشترک در یک پلتفرم طراحی شدهاند که همه کاربران از آن استفاده میکنند.
به عنوان مثال، یک تابع عمومی می تواند ایجاد شود تا به همه کاربران یک پلتفرم اجازه دهد تا وضعیت حساب خود را بررسی کنند. یکی از رایجترین روشهای بهرهبرداری از قراردادهای هوشمند، از طریق کارکردهای عمومی است.
با این که نوشتن قراردادهای هوشمند با Solidity آسان است، نوشتن آنها به صورت ایمن اغلب بسیار دشوار است. برای مثال، اگر تابع withdrawal در یک قرارداد هوشمند ایمن نباشد، مهاجم میتواند تابع آسیبپذیر را دستکاری کند تا یک حساب را کاملاً تخلیه کند.
مهاجم میتواند با استفاده از لوپی که عملکرد برداشت را به طور مکرر تکرار میکند، بر روی یک تابع withdrawal برای ارسال پول به یک حساب دیگر فراخوانی کند.
توابع خصوصی فقط از داخل قراردادها قابل فراخوانی هستند. آنها حاوی دستورالعملهایی هستند که تنها پس از فراخوانی توسط توابع دیگر، به صورت زنجیرهای قابل اجرا هستند. این کار دستکاری کد توسط عوامل مخرب را دشوارتر میکند.
استانداردها و منطق کد
استانداردهای مختلفی در حال ظهور هستند که تعیین میکنند چگونه از قراردادهای هوشمند Solidity برای ساخت اپلیکیشنهای اتریوم استفاده میشود. این استانداردها به عنوان استانداردهای ERC (Ethereum Request for Comments) شناخته میشوند.
استانداردها بر اساس سندی هستند که حاوی دستورالعمل هایی در مورد توابع مورد نیاز و محدودیتهایی در مورد نحوه رفتار کد است.
استانداردهای ERC که نحوه عملکرد Solidity را تعیین می کنند عبارتند از:
- ERC20
- ERC165
- ERC721
- ERC223
- ERC621
- ERC777
- ERC827
- ERC884
- ERC865
- ERC1155
روش های مختلفی وجود دارد که می توان از Solidity برای ایجاد تعامل بین قراردادهای هوشمند استفاده کرد. Solidity همچنین می تواند برای ایجاد دستورالعملهای اختصاصی در مورد نحوه ذخیره دادهها در قرارداد هوشمند استفاده شود. منطق و دادهها در قراردادهای هوشمند را میتوان با استفاده از Solidity از هم جدا کرد. با استفاده از قراردادهای جایگزین، منطق یک قرارداد را می توان تغییر داد تا این امکان را فراهم کند.
تغییرناپذیری
تغییر کد قرارداد هوشمند پس از نوشتن و کامپایل کردن غیرممکن است. این به این معنی است که هر خط کد باید طبق برنامه کار کند، در غیر این صورت ممکن است خطراتی جدی در زمینه سوء استفاده از کد وجود داشته باشد.
از آنجایی که بلاک چین اتریوم تغییر ناپذیر است، تغییر دادهها و منطق نوشته شده روی آن غیرممکن است. یکی از راههای دور زدن این موضوع، استفاده از یک پروکسی برای اشاره به قرارداد دیگری است که حاوی منطق تجاری واقعی باشد. این کار امکان رفع باگها را در حین اجرای نسخه جدید قرارداد فراهم میکند.
کارمزدها
کارمزدهای استفاده از Solidity در شبکه اصلی اتریوم پرداخت میشود. برخی از هزینههای اضافی مبتنی بر سیستم کارمزد اتریوم است نیاز به پرداخت به ماینرها برای ایمنسازی شبکه بلاک چین دارد تا کد بتواند با خیال راحت روی آن اجرا شود.
هنگام نوشتن قراردادهای هوشمند، مهم است که به یاد داشته باشید که میزان کارمزد میتواند تعیین کند که یک قرارداد هوشمند چقدر کارآمد است. از آنجایی که کارمزد برای هر شکاف ذخیره سازی استفاده شده پرداخت میشود، اقدامات انجام شده با کد Solidity کارمزدی به همراه دارد. قرارداد هوشمندی که اجرای آن پرهزینه است بعید است در دراز مدت مورد استفاده قرار گیرد.
بهینه سازی کارمزد (Gas optimization) به کاهش هزینه کارمزد در هنگام اجرای کد Solidity کمک میکند. برخی از محبوب ترین روش های بهینه سازی کارمزد شامل استفاده از کتابخانه ها و استفاده از توابع کمتر است. کتابخانه ها اغلب برای ذخیره bytecode استفاده میشوند.
به جای اضافه کردن bytecode غیر ضروری به قرارداد هوشمند، منطق را می توان در کتابخانه ها قرار داد. این به کوچک نگه داشتن اندازه قرارداد هوشمند کمک میکند. با استفاده از توابع کمتر، bytecode کمتری مورد نیاز است و دشواری auditing کد نیز کاهش مییابد.
چگونه می توان از Solidity در اتریوم استفاده کرد؟
Solidity برای ایجاد قراردادهای هوشمند برای توکنهای قابل تعویض و توکنهای غیر قابل تعویض استفاده میشود. استانداردهای مختلفی برای ساخت توکنهای غیر قابل تعویض و توکن های قابل تعویض در اکوسیستم اتریوم استفاده میشود.
این موارد اجازه می دهد تا انواع مختلفی از موارد استفاده برای کاربران بلاک چین ایجاد شود. Solidity افراد را قادر میسازد تا از توکنها و توکنهای غیرقابل تعویض در اتریوم استفاده کنند. انواع مختلفی از کاربردها برای توکنها توسط اتریوم امکانپذیر است. از minting توکنهای غیرقابل تعویض گرفته تا افزودن آنها به farming pool ها برای بهرهمندی بیشتر.
شکلگیری سازمانهای مستقل غیرمتمرکز (DAO) نیز توسط Solidity امکانپذیر شدهاست. DAO، که نوع جدیدی از ساختار سازمانی آنلاین است، در درجه اول با استفاده از Solidity نوشته شده است. DAO به افراد مختلف اجازه می دهد تا به عنوان اعضای یک پلتفرم آنلاین گرد هم آیند و در آنجا به تصمیمات کلیدی DAO رأی بدهند.
Solidity امکان خودکارسازی فرآیندهای داخلی DAO را فراهم میکند. نمونه هایی از اتوماسیون فرآیند در DAO ها شامل اخذ رأی برای تصمیمات کلیدی و تخصیص اعتبار به اعضای DAO برای مشارکت آنها در گروه است.
تعریف استانداردها برای بلاک چین
Solidity خیلی بیشتر از یک زبان برنامه نویسی است. این زبان در حال تعیین استانداردهایی برای آینده فناوری بلاک چین است.
به لطف تعداد توسعهدهندگان اپن سورس که برای بهبود امنیت و عملکرد Solidity کار می کنند، هزاران برنامه کاربردی در اکوسیستم اتریوم همچنان برای عملکرد برنامه های خود به آن وابسته هستند. با ایجاد استانداردهای جدید برای قراردادهای هوشمند در اتریوم، استفاده از این زبان امن تر خواهد شد.
منبع: makeuseof نویسنده: کالوین ابون آمو
Leave feedback about this