یکی از زیباییهای نسل جدید اینترنت که وب ۳ یا نسل سوم وب نام دارد، این است که هر کسی میتواند با قراردادهای هوشمند پیادهسازیشده در بلاکچینها کار کند. قراردادهای هوشمند، برنامههای کامپیوتری هستند که در بلاک چین اجرا میشوند و سورس کد آنها برای همه قابل مشاهده و قابل تایید است. یعنی هر کسی میتواند بدون رابط وب، با آنها تعامل داشته باشد. این کار با اجرای یک کلاینت بلاک چین و انجام تراکنشهایی از طریق واسط خط فرمان (CLI) انجام میشود. در این مقاله از میهن بلاکچین، نحوه تایید قرارداد هوشمند در سایت اتر اسکن را به شما آموزش میدهیم.
آموزش تایید قرارداد هوشمند در اتر اسکن
سایت Etherscan یک بلاک اکسپلورر برای شبکههای بلاکچینی مثل اتریوم، پالیگان، آربیتروم، آپتیمیزم و غیره است. در واقع اتر اسکن یک واسطه بین اپلیکیشنهای وب یا موبایل و یک CLI برای تعامل با قراردادهای هوشمند است. ما تنها میتوانیم با قراردادهای هوشمند تاییدشده (Verified) در اتر اسکن تعامل داشته باشیم. در این آموزش یاد میگیرید که چگونه در اتر اسکن قراردادهای هوشمند را تایید کرده و با آنها کار کنید.
تایید فایل تکی سالیدیتی
برای آغاز فرایند تایید، ابتدا باید قرارداد هوشمند را پیادهسازی کنید. به سایت Remix IDE بروید یک سند یا فایل جدید “Counter.sol” بسازید. سپس کد زیر را در آن Paste یا جایگذاری کنید:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Counter {
uint256 internal counter;
function increment() external {
unchecked {
++counter;
}
}
function getCurrent() external view returns(uint256) {
return counter;
}
}
قبل از پیادهسازی قرارداد، باید به ۲ مورد توجه کنید: نسخه کامپایلر سالیدیتی که برای کامپایل (Compile) این قرارداد استفاده شده است و لایسنس قرارداد که در قسمت بالای فایل با عنوان “SPDX-License-Identifier” مشخص شده است.
در کد فایل مشخص کردهایم که قرارداد میتواند با کامپایلرهای نسخه ۰.۸.۰ الی ۰.۹.۰ کامپایل شود که نسخههایی از ۰.۸.۰، ۰.۸.۱، ۰.۸.۲ تا… را شامل میشود.
به صفحه “Solidity Compiler” بروید و نسخه کامپایلر موردنظر (نسخههای ۰.۸) را انتخاب کنید. سپس روی “Compile Counter.sol” کلیک کنید. ما بهعنوان مثال از نسخه ۰.۸.۷ استفاده کردهایم.
پس از تکمیل کامپایل، به صفحه “Deploy & Run Transactions” بروید. از قسمت “Environment” گزینه “Injected Provider – Metamask” را انتخاب کنید. با انتخاب این گزینه، پیامی مبنی بر اتصال کیف پول متامسک به وبسایت Remix IDE نمایش داده خواهد شد. پس از اتصال کیف پول، شبکه موردنظر برای پیادهسازی قرارداد را انتخاب کنید.
ما در این مقاله قرارداد را در شبکه Rinkeby اجرا میکنیم، در نتیجه داخل کیف پول باید گزینه “Rinkeby Test Network” را انتخاب کنیم. حالا برای پیادهسازی قرارداد به مقداری اتر آزمایشی Rinkeby نیاز داریم. این اترهای رایگان را میتوانید از فاست چین لینک و با متصل کردن کیف پول خود دریافت کنید. دقت کنید که شبکه انتخاب شده در قسمت بالا و سمت راست صفحه، Ethereum Rinkeby باشد.
نهایتا، روی گزینه نارنجی رنگ “Deploy” کلیک کرده و تراکنش را از متامسک امضا کنید. باید حدود ۱۵ ثانیه صبر کنید تا تراکنش تایید شود. پس از تایید، میتوانید از طریق رابط کاربری Remix IDE با قرارداد هوشمند خود کار کنید. اما هدف ما این است که قرارداد برای همه قابل استفاده باشد.
اگر قرارداد خود را در اتر اسکن پیدا کنیم (با رهگیری هش آخرین تراکنش و یا با وارد کردن آدرس قرارداد در کادر سرچ اتر اسکن)، با کلیک کردن در تب Contract خواهیم دید که فقط بایت کد (Bytecode) قرارداد برای ما قابل مشاهده است. این یعنی برای استفاده از این قرارداد هوشمند با اکسپلورر اتر اسکن، باید آن را “verify” یا تایید کنیم.
برای آغاز فرایند تایید قرارداد، روی متن آبی رنگ “Verify and Publish” که حاوی یک لینک است کلیک کنید. صفحه زیر باز خواهد شد:
در قسمت ورودی اول (اگر بهطور خودکار پر نشده باشد)، آدرس قرارداد خود را وارد کنید. از منوی “Compiler Type” گزینه “Solidity (Single File)” را انتخاب کنید. حالا منوی “Compiler Version” ظاهر میشود. در اینجا باید همان نسخه کامپایلر را انتخاب کنیم که قبل از پیادهسازی برای کامپایل قرارداد هوشمند استفاده کرده بودیم (در مثال مقاله از نسخه ۰.۸.۷ استفاده شده بود). حالا از منوی “Open Source License Type” لایسنس فایل سالیدیتی را که با عنوان “SPDX-License-Identifier” مشخص شده بود، انتخاب کنید. لایسنس فایل ما، MIT است. حالا روی Continue کلیک کرده و به صفحه بعد بروید.
سورس کد قرارداد را در کادر جایگذاری کنید و بعد از حل کردن کپچا، روی گزینه آبی رنگ “Verify and Publish” کلیک کنید. حالا باید یک تیک سبز رنگ در تب Contract ظاهر شود. این یعنی قرارداد شما تایید شده است و حالا میتوانید با آن تعامل داشته باشید.
اگر روی گزینه “Read Contract” کلیک کنید، میتوانید از تابع “getCurrent” استفاده کرده و مقدار فعلی متغیر شمارشی را مشاهده کنید که بهصورت پیشفرض صفر است.
با کلیک کردن بر روی “Write Contract” میتوانید کیف پول خود را به اتر اسکن متصل کرده و با تابع “increment” کار کنید. پیامی برای امضا کردن تراکنش در متامسک به شما نمایش داده میشود (دقت کنید که شبکه کیف پول باید Rinkeby باشد). پس از آنکه تراکنش با موفقیت در یک بلاک ثبت شد، اگر به بخش “Read Contract” رفته و تابع را “Read Contract” دوباره اجرا کنید، مشاهده میکنید که مقدار “counter” به ۱ تغییر کرده است.
تایید فایلهای متعدد سالیدیتی با استفاده از پلاگین Flattener
تا به اینجا نحوه تایید قرارداد هوشمند در اتر اسکن را یاد گرفتیم. مثالی که نشان دادیم، درباره یک فایل سالیدیتی بود. اما همیشه اینطور نیست. در واقعیت، قرارداد هوشمند شما احتمالا از قراردادها، رابطها و پایگاههای دیگر استفاده خواهد کرد.
برای مثال، قرارداد Chainlink Price Feed Consumer (فید قیمت مصرفکننده چین لینک) را در نظر میگیریم. یک فایل سالیدیتی جدید ایجاد کنید و آن را “PriceFeedConsumer.sol” بنامید. کد زیر را در آن جایگذاری کنید:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
contract PriceConsumerV3 {
AggregatorV3Interface internal priceFeed;
/**
* Network: Rinkeby
* Aggregator: ETH/USD
* Address: 0x8A753747A1Fa494EC906cE90E9f37563A8AF630e
*/
constructor() {
priceFeed =
AggregatorV3Interface(0x8A753747A1Fa494EC906cE90E9f37563A8AF630e);
}
/**
* Returns the latest price
*/
function getLatestPrice() public view returns (int) {
(
/*uint80 roundID*/,
int price,
/*uint startedAt*/,
/*uint timeStamp*/,
/*uint80 answeredInRound*/
) = priceFeed.latestRoundData();
return price;
}
}
معنی خط “import “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;” این است که ما رابط سالیدیتی را از یک فایل دیگر اضافه کردهایم. رابطها قرارداد هوشمند نیستند. از آنها برای فهرست کردن روشهای مشابه، بدون پیادهسازی بدنه اصلی تابع استفاده میشود. رابطها با کلمه کلیدی “interface” مشخص میشوند. رابطها یا توسط قراردادهای هوشمند استفاده میشوند و روشهای فهرستشده را پیادهسازی میکنند و یا برای اجرای روشهای قراردادهای دیگر استفاده میشوند تا توابع فهرستشده را اجرا کنند. در مثال فوق ما از کاربرد دوم رابطها استفاده کردیم، یعنی تابع “latestRoundData” را در قرارداد اگریگیتور چین لینک به کار گرفتیم.
حالا قرارداد را با کامپایلر سالیدیتی نسخه ۰.۸.۷ پیادهسازی کنید. لایسنس همان MIT است که در خط اول قرارداد هوشمند قابل مشاهده است.
پس از پیادهسازی، به فایل اکسپلورر Remix IDE بروید. “PriceFeedConsumer.sol” را پیدا کرده و روی آن راست کلیک کنید، بعد “Flatten” را بزنید.
این دستور یک فایل جدید به نام “PriceFeedConsumer_flat.sol” ایجاد کرده و تمام ایمپورتها را با سورس کد قراردادها، رابطها و پایگاههای واردشده جایگزین خواهد کرد.
توجه کنید که افزونه “Flattener” در Remix IDE بهطور خودکار فعال میشود. روش دوم برای Flatten کردن قرارداد، فعال کردن این افزونه بهصورت دستی است. به قسمت “Extensions” در سمت چپ پایین صفحه بروید (بالای گزینه “Settings”) و روی گزینه سبز رنگ “Activate” در کنار افزونه “Flattener” کلیک کنید تا فعال شود.
حالا به تب افزونه Flattener بروید و روی “Flatten PriceFeedConsumer.sol” کلیک کنید. این کار باعث ایجاد فایل جدید نمیشود. بلکه، سورس کدهای فلتن شده را در کلیپ بورد کپی میکند تا بتوانید آنها در صفحه تایید اتر اسکن پِیست کنید. بهصورت دلخواه، هر یک از این دو روش فلتنینگ را میتوانید انجام دهید.
حالا به صفحه تایید اتر اسکن بروید و همانطور که در بخش قبل گفته شد، گزینههای زیر را انتخاب کنید:
- نوع کامپایلار : سالیدیتی (تک فایل)
- نسخه کامپایلر: v0.8.7+commit.e28d00a7
- نوع لایسنس متن باز: MIT License (MIT)
در آخر روی “Continue” کلیک کنید.
در صفحه بعد، بسته به روشی که برای فلتنینگ استفاده کردهاید محتوای کپیشده را از فایل “PriceFeedConsumer_flat.sol” یا از کلیپ بورد در کادری که روی آن “Enter the Solidity Contract Code below” نوشته شده است پیست کنید. نهایتا کپچا را حل کرده و روی “Verify and Publish” کلیک کنید.
تایید فایلهای سالیدیتی متعدد با استفاده از پلاگین Etherscan
روش دیگر برای تایید قراردادهایی که شامل چند فایل سالیدیتی هستند، استفاده از پلاگین “Etherscan – Contract Verification” در سایت Remix IDE است.
ما همان قرارداد “PriceFeedConsumer.sol” را که در بخش قبل نوشتیم، استفاده خواهیم کرد. دوباره قرارداد را پیادهسازی کنید. سپس از تب Extensions (افزونهها)، پلاگین “Etherscan – Contract Verification” را فعال کنید.
حالا به سایت اتر اسکن بروید و ثبت نام کنید. در بخش تنظیمات حساب خود، قسمت “API Keys” را پیدا کنید. با استفاده از طرح رایگان (Free Plan) یک کلید API بسازید.
دوباره به Remix IDE بروید و روی تب “Etherscan – Contract Verification” کلیک کنید. کلید API خود را در آنجا پیست کنید و “Save API key” را بزنید.
قراردادی را که میخواهید تایید کنید انتخاب کرده و آدرس قرارداد را وارد کنید. “Verify Contract” را بزنید. تمام، قرارداد شما در اتر اسکن تایید شده است.
جمعبندی
اتر اسکن یک اکسپلورر بلاک است که امکان تعامل و کار با قراردادهای هوشمند را برای کاربران فراهم میکند. اما برای استفاده از قراردادهای هوشمند در این سایت، قراردادها باید تایید یا Verify شوند. در این مقاله، نحوه تایید قرارداد هوشمند در اتر اسکن