در این مقاله یاد میگیریم چگونه یک قرارداد NFT را با استفاده از ابزار Foundry روی شبکه تست Sepolia مستقر کنیم و آن را بهصورت خودکار در Etherscan تأیید کنیم. این آموزش گامی عملی برای حرفهایتر شدن در توسعه قراردادهای هوشمند سالیدیتی است.
آموزش راه اندازی و تایید یک NFT با استفاده از Foundry در سالیدیتی
در آموزش ویدیویی بالا، شما یک NFT را با استفاده از محیط Remix روی پلتفرم Opensea قرار دادید. این روش خوب است، اما Remix برای استفاده در محیط پروداکشن (production use) ایدهآل نیست. در این فصل، به شما نشان خواهیم داد که چگونه:
- Foundry را برای کار با NFT پیکربندی کنید.
- آن را بر روی تست نت Sepolia دیپلوی (deploy) کرده و در Etherscan تأیید (verify) کنید.
اگر تمرینها را انجام داده باشید، باید Foundry از قبل روی سیستم شما نصب شده باشد، پس بیایید آن را پیکربندی کنیم. یک پوشه جدید ایجاد کنید؛ نام آن را foundry-nft
بگذارید، با دستور cd
وارد آن شوید و دستور forge init
را در پوشه خالی اجرا کنید.
در اینجا کدی برای ایجاد NFT آمده است. فایل Counter.sol
موجود در دایرکتوری src
را به FoundryNFT.sol
تغییر نام دهید و این کد را کپی و در آن پیست کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "openzeppelin-contracts/contracts/token/ERC721/ERC721.sol"; contract FoundryNFT is ERC721 { uint256 public totalSupply = 0; constructor() ERC721("FoundryNFT", "FNFT") {} function mint() external payable { // you can add a price check here if you like totalSupply++; _mint(msg.sender, totalSupply); } } |
ما قرارداد ERC721 از OpenZeppelin را ایمپورت (import) کرده و از آن ارث بری میکنیم، بنابراین برای نصب آن از دستور زیر استفاده کنید:
1 |
forge install Openzeppelin/openzeppelin-contracts --no-commit |
استفاده از Remappings
اگر پیشزمینه ای از کار با Remix دارید، متوجه خواهید شد که مسیر ایمپورت OpenZeppelin در اینجا متفاوت است. Remix کتابخانه ها را در همان محلی که Foundry ذخیره میکند، نگهداری نمیکند. با این حال، Foundry قابلیتی به نام remappings
ارائه میدهد که اجازه میدهد هنگام ایمپورت، جستجوی فایل ها به مکان دیگری هدایت (redirect) شود. برای مشاهده تمام remappings
های موجود، دستور forge remappings
را اجرا میکنیم. خروجی به این صورت خواهد بود:
1 2 3 |
ds-test/=lib/forge-std/lib/ds-test/src/ forge-std/=lib/forge-std/src/ openzeppelin-contracts/=lib/openzeppelin-contracts/ |
میتوانیم remapping
مربوط به OpenZeppelin را مشاهده کنیم، بنابراین نیازی نیست مسیر کامل را تا قرارداد های OpenZeppelin مشخص کنیم. میتوانیم از مسیر openzeppelin-contracts/contracts/token/ERC721/ERC721.sol
استفاده کنیم، به جای اینکه ابتدا دایرکتوری “lib/” را مشخص نماییم.
عدم استفاده از Remappings
اگر از remappings
در forge استفاده نمیکردیم، مجبور بودیم مسیر کامل فایل ها یا دایرکتوری های خود را مشخص کنیم. به عنوان مثال، برای فایل ERC721.sol
، برای ایمپورت کردن آن، باید چیزی شبیه به این مسیر را وارد میکردیم:
1 |
import "lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol"; |
برای تأیید اینکه این (پیکربندی) هنوز معتبر است، دستور forge build
را اجرا کنید و ببینید آیا کامپایل میشود. و همینطور هم هست (کامپایل با موفقیت انجام میشود):
1 2 3 4 |
[⠰] Compiling... [⠃] Compiling 1 files with 0.8.17 [⠊] Solc 0.8.17 finished in 1.38s Compiler run successful |
اکنون تغییرات را به حالت قبل بازگردانید.
ایجاد فایل remappings.txt
در یک مرحله
این کار را میتوان با دستور زیر انجام داد:
1 |
forge remappings > remappings.txt |
ما میتوانیم محل ارجاع remapping ها را بیشتر پیکربندی کنیم، با ایجاد یک فایل به نام
remappings.txt
در دایرکتوری اصلی پروژه و افزودن این خط به فایل:
1 |
@openzeppelin=lib/openzeppelin-contracts/contracts |
1 |
import "@openzeppelin/token/ERC721/ERC721.sol"; |
برای وارد کردن توکن ERC721 استفاده کنیم، بهجای اینکه مسیر کامل فایل را بهصورت صریح بنویسیم.
این remapping را میتوان در فایل remappings.txt
پیکربندی کرد، به شرطی که مسیر درست را مشخص کرده باشد.
گرفتن کلید Etherscan
زمانی که NFT خود را مستقر میکنیم، به یک API از Etherscan برای تأیید قرارداد نیاز داریم. این به ما اجازه میدهد تا بهراحتی با استفاده از forge
به Etherscan متصل شده و قرارداد هوشمند را تأیید کنیم، بدون اینکه نیاز باشد وارد سایت Etherscan شده و فرآیند دستی را دنبال کنیم.
به وبسایت Etherscan بروید، وارد حساب خود شوید و یک کلید API ایجاد کنید.
ما کلید API زیر را ایجاد کردهایم:U3D9IS6Z5E872VFS7M7AWR1SBA8786ZZ3Y
ما بعداً از این کلید API استفاده خواهیم کرد.
ایجاد یک کیف پول موقتی (throwaway wallet)
هرگز از کلید خصوصی یک کیف پول سخت افزاری یا هر کیف پولی که دارای ارزش قابل توجهی است استفاده نکنید.
برای استقرار قرارداد NFT در شبکه آزمایشی (testnet)، ما به یک کلید خصوصی با مقداری اتر آزمایشی (test ether) برای امضای تراکنش نیاز داریم.
برای ساده سازی، ما یک کیف پول موقتی ایجاد کردهایم و مقداری اتر Sepolia به آن اختصاص دادهایم.
در اینجا کلید خصوصی این کیف پول آمده است:787ea4ec95ab4f4e66c4c4c387cd0b5fbbec84a9293db485fa5f86f490c157d4
(نباید از این کلید استفاده شود، چون قبلاً افشا شده و ناامن در نظر گرفته میشود.)
قرار دادن کلید Etherscan و کلید خصوصی کیف پول در متغیرهای محیطی
اکنون که هم کلید API و هم کلید خصوصی را داریم، مرحله بعدی این است که یک فایل .env
در دایرکتوری اصلی پروژه ایجاد کرده و موارد زیر را به آن اضافه کنیم:
1 2 |
ETHERSCAN_KEY=U3D9IS6Z5E872VFS7M7AWR1SBA8786ZZ3Y #you can replace this with your API key PRIVATE_KEY=787ea4ec95ab4f4e66c4c4c387cd0b5fbbec84a9293db485fa5f86f490c157d4 |
مطمئن شوید که فایل .env
را در فایل .gitignore
قرار دادهاید تا بهطور تصادفی کلیدهای خصوصی خود را منتشر نکنید!
اجرای این اسکریپت
برای استقرار و تأیید قرارداد NFT روی شبکه Sepolia، این اسکریپت را اجرا کنید:
1 2 3 |
source .env #load the environment variables forge create --rpc-url https://rpc2.sepolia.org --private-key $PRIVATE_KEY --etherscan-api-key $ETHERSCAN_KEY --verify src/FoundryNFT.sol:FoundryNFT |
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- انتشار: ۱۷ اردیبهشت ۱۴۰۴
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- دوره های تخصصی برنامه نویسی
- رپورتاژ
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره آموزش Go
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس