صالح راهپیما
صالح راهپیما
خواندن ۲ دقیقه·۳ سال پیش

کامپیایل قرارداد هوشمند در سالیدیتی

کامپایل قرارداد هوشمند در سالیدیتی Solidity
کامپایل قرارداد هوشمند در سالیدیتی Solidity


زبان سایدیتی (Solidity) نیز مانند سایر زبانهای برنامه نویسی دارای کامپایلر مخصوص به خودش است. کدهای سایدیتی داخل کامپایلر خود کامپایل شده و در نتیجه آن، 2 قسمت از اطلاعات را جهت استقرار تولید می کند:

الف) ABI

ب) Bytecode

مولفه های ABI و Bytecode چیست؟

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

مولفه ABI یا Application Binary Interface در علم کامپیوتر، یعنی یک رابط بین دو ماژول برنامه. همواره Interface ها به یک سطح پایین تر یعنی ABI کامپایل میشوند.

ماشین مجازی اتریوم (EVM) جزء اصلی شبکه اتریوم است (قلب اتریوم) و قرارداد هوشمند ، قطعات کد ذخیره شده در بلاکچین اتریوم است که روی EVM اجرا می شود

حال توجه کنید که کدهای قرارداد هوشمند که به زبان های سطح بالا (مانند سالیدیتی) نوشته شده اند نیاز است کامپایل شوند به EVM Bytecode.

پس میتونیم بگیم Bytecode یک کد قابل اجرا (سطح پایین) بر روی EVM است و ABI contract یک رابط جهت تعامل با Bytecode.
مراحل کامپایل و استقرار قرارداد هوشمند در سالیدیتی
مراحل کامپایل و استقرار قرارداد هوشمند در سالیدیتی


به عنوان مثال اگر شما بخواهید یک تابع را در قرارداد هوشمند را با کدهای جاوااسکریپت خودتون فراخوانی کنید، اینجاست که ABI یک نقش واسطه بین کدهای جاوااسکریپت و Bytecode در EVM ایفا می کند جهت چی؟ جهت تعامل بایکدیگر. جزئیات بیشتر در مورد قراردادهای هوشمند رو میتونید در پیج اینستا sal.chain پیدا کنید.

نکته: Bytecode برای انسان قابل خواندن نیست و تنها برای ماشین قابل خواندن است.

نکته 2: ABI در فرمت فایل JSON نشان داده میشود و رمزگذاری میشود که این رمزگذاری عمدتا خودکار است و توسط کامپایلر هایی مانند Remix یا کیف پول هایی که با بلاکچین در تعامل هستند صورت میگیرد.

میتونیم بگیم ABI خیلی شبیه به API یا Application Program Interface است. در واقع ABI ها متدها و ساختارهای مورد استفاده برای تعامل با قرارداد را تعریف می کند درست مانند API اما در سطح پایین تر.

مثال: در شکل زیر میتونید نمونه یک قرارداد هوشمند ساده در سالیدیتی و همچینی Bytecode آن را مشاهده کنید:

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


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