چگونه بر روی Linea بسازیم – zk-rollup در اتریوم

بسیاری از L2 های جدید در اکوسیستم web3 با هدف بهبود مقیاس پذیری اتریوم در حال ظهور هستند. این L2 از راهحلهای مختلفی برای ایجاد لایههایی در بالای اتریوم استفاده میکنند که سریعتر، ارزانتر هستند و در عین حال همچنان از لایه بلاک چین پایه اتریوم برای ایمن کردن تراکنشها بهره میبرند. در میان این مجموعه جدید از راهحلهای لایه دو، zk-rollups (یا مجموعههای دانش صفر) به بالاترین سطح خود رسیدهاند. Linea که توسط ConsenSys راه اندازی شد، به طور خاص یکی از مورد انتظارترین پروژه های zk-rollup است.
در این مقاله، آنچه که Linea را بسیار هیجانانگیز میکند، بررسی میکنیم. سپس، آموزش نحوه ساخت dapp در شبکه آزمایشی Linea را مرور خواهیم کرد. در نهایت، ما با استفاده از Solidity، MetaMask و Truffle، ارز دیجیتال خود را در Linea ایجاد میکنیم: همه ابزارهای اکوسیستم بالغی که توسط توسعهدهندگان بلاک چین برای ساخت dapp استفاده میشوند.
بیا شروع کنیم.
Linea: خطی مستقیم از گذشته اتریوم تا حال آن
Zk-rollups یک راه حل لایه 2 است که مقدار داده هایی را که باید روی یک بلاک چین ذخیره و پردازش شوند، بسیار کاهش می دهد. Zk-rollups با انجام محاسبات خارج از زنجیره (جایی که ارزانتر و سریعتر است) و ایجاد اثبات دانش صفر برای تأیید اعتبار این تراکنش ها، که سپس روی زنجیره در شبکه اصلی اتریوم ثبت می شوند. برخی از پروژه های فعلی که از zk-proofs استفاده می کنند عبارتند از Starknet (zk-starks)، Loopring (zk-snarks)، Immutable X و zkSync.
اما، در میان zk-rollup ها، zkEVM بدون شک هیجان انگیزترین توسعه در دنیای بلاک چین است. zkEVM zk-rollups را با EVM (ماشین های مجازی اتریوم) ترکیب می کند. zkEVM ها به لطف راه حل مقیاس پذیری جمع آوری، دارای توان عملیاتی فوق العاده بالا و هزینه تراکنش فوق العاده کم هستند. در عین حال هستند سازگار با EVM که این امکان را برای توسعه دهندگان اتریوم فراهم می کند تا از zk-rollup با دانش و ابزارهایی که از قبل در اختیار دارند استفاده کنند.
اگرچه zkEVM ها یک فناوری نوپا هستند، اما چند شرکت مانند ConsenSys موفق شده اند در این فضا پیشرفت کنند. ConsenSys اخیراً Linea را راه اندازی کرده است، یک شبکه آزمایشی عمومی برای زنجیره zkEVM مورد انتظار خود. Linea اولین برنامهنویس zk-rollup است که نه تنها بر ارائه وعده zkEVM تمرکز دارد، بلکه آن را به گونهای انجام میدهد که از یک محیط توسعهدهنده یکپارچه با ادغامهای بومی با ابزارهای موجود پشتیبانی میکند.
ارز دیجیتال خود را در Linea zk-rollup ایجاد کنید
بیایید وارد شویم و ببینیم که همه اینها با استقرار یک قرارداد توکن در Linea چگونه کار می کند. در طول مسیر، خواهیم دید که پیادهسازی قراردادمان چقدر ارزان است و چگونه میتوانیم با دانش و ابزارهایی که توسعهدهندگان اتریوم از قبل با آن آشنا هستند، از معادلسازی EVM Linea استفاده کنیم.
مرحله 1: MetaMask را نصب کنید
اولین کاری که می خواهیم انجام دهیم این است که یک کیف پول MetaMask را راه اندازی کرده و شبکه آزمایشی Linea را به آن اضافه کنیم. MetaMask محبوبترین، امنترین و آسانترین کیف پول خودسرپرست در جهان است.
می توانید افزونه MetaMask را برای مرورگر خود از اینجا دانلود کنید.
پس از نصب افزونه، MetaMask کیف پول را برای شما راه اندازی می کند. در این فرآیند، یک عبارت مخفی به شما داده می شود. آن را ایمن نگه دارید و تحت هیچ شرایطی نباید آن را عمومی کنید.
هنگامی که MetaMask را راه اندازی کردید، روی تب Network در گوشه سمت راست بالای صفحه خود کلیک کنید. گزینه ای برای نمایش/پنهان کردن شبکه های آزمایشی خواهید دید.
MetaMask به طور خودکار با شبکه Linea پیکربندی می شود. هنگامی که شبکه های آزمایشی را روشن کردید، باید بتوانید شبکه آزمایشی Linea Goerli را در منوی کشویی مشاهده کنید.
مرحله 2: مقداری goerliETH دریافت کنید
برای استقرار قرارداد هوشمند خود و تعامل با آن، به آزمایش رایگان ETH نیاز داریم. اولین مرحله از این فرآیند، بدست آوردن مقداری goerliETH در شبکه اصلی تست Goerli است.
شما می توانید این را به صورت رایگان از لیست شیرهای موجود در اینجا دریافت کنید.
پس از تامین مالی کیف پول خود، به شبکه تست Goerli در MetaMask برگردید. اکنون باید تعادل غیر صفر را مشاهده کنید.
مرحله 3: goerliETH را به Linea پل بزنید
اکنون که وجوهی در Goerli داریم، بیایید با استفاده از پروتکل Hop آنها را به Linea برسانیم.
از صرافی Hop در اینجا دیدن کنید و کیف پول MetaMask خود را وصل کنید (با استفاده از دکمه Connect Wallet در سمت راست بالا).
هنگامی که کیف پول شما متصل شد، آن را انتخاب کنید از جانب شبکه به عنوان گورلی و به شبکه به عنوان Linea. برای این آموزش، حدود 0.2 ETH باید کافی باشد.
یکبار کلیک کنید ارسال، پل زدن باید چند دقیقه طول بکشد. پس از اتمام، به شبکه Linea در MetaMask بروید. باید تعادل غیر صفر را ببینید.
مرحله 4: NPM و Node را نصب کنید
مانند تمام dapp های اتریوم، ما پروژه خود را با استفاده از node و npm می سازیم. اگر اینها را روی دستگاه محلی خود نصب نکرده اید، می توانید این کار را در اینجا انجام دهید.
برای اطمینان از اینکه همه چیز به درستی کار می کند، دستور زیر را اجرا کنید:
$ node -v
اگر همه چیز خوب پیش برود، باید یک شماره نسخه برای node ببینید.
مرحله 5: برای یک حساب Infura ثبت نام کنید
برای استقرار قرارداد خود در شبکه Linea، به یک حساب Infura نیاز داریم. Infura به ما امکان دسترسی به نقاط پایانی RPC را می دهد که امکان دسترسی سریع، قابل اعتماد و آسان به بلاک چین مورد نظر ما را فراهم می کند.
برای یک حساب کاربری رایگان در اینجا ثبت نام کنید. هنگامی که حساب خود را ایجاد کردید، به داشبورد بروید و انتخاب کنید کلید جدید ایجاد کنید.
برای شبکه، انتخاب کنید Web3 API و اسمش را بگذار خط.
هنگامی که بر روی Create کلیک کردید، Infura یک کلید API برای شما ایجاد می کند و به طور خودکار به شما نقاط پایانی RPC را به اتریوم، Linea، سایر L2 ها و L1 های غیر EVM (و شبکه های آزمایشی مربوطه) می دهد.
برای این آموزش، ما فقط به نقطه پایانی Linea RPC. این URL به شکل <> است
مرحله 6: یک Node Project ایجاد کنید و بسته های لازم را نصب کنید
بیایید با اجرای دستورات زیر یک مخزن پروژه خالی راه اندازی کنیم:
$ mkdir sunshine-coin && cd sunshine-coin
$ npm init -y
ما از Truffle، یک محیط توسعه در سطح جهانی و چارچوب آزمایشی برای قراردادهای هوشمند EVM، برای ساخت و استقرار قرارداد هوشمند ارز دیجیتال خود استفاده خواهیم کرد. Truffle را با اجرا نصب کنید:
$ npm install —save-dev truffle
اکنون می توانیم با اجرای دستور زیر یک پروژه barebones Truffle ایجاد کنیم:
$ npx truffle init
برای بررسی اینکه آیا همه چیز به درستی کار می کند، اجرا کنید:
$ npx truffle test
ما اکنون Truffle را با موفقیت پیکربندی کرده ایم. اکنون، اجازه دهید بسته قراردادهای OpenZeppelin را نصب کنیم. این بسته به ما امکان دسترسی به پیادهسازی پایه ERC-20 (استاندارد توکنهای قابل تعویض) و همچنین چند قابلیت اضافی مفید را میدهد.
$ npm install @openzeppelin/contracts
برای اینکه به Truffle اجازه دهیم از کیف پول MetaMask ما استفاده کند، معاملات را امضا کند و از طرف ما برای بنزین بپردازد، به بسته دیگری به نام hdwalletprovider نیاز داریم. با استفاده از دستور زیر آن را نصب کنید:
$ npm install –save-dev @truffle/hdwallet-provider
در نهایت، برای حفظ امنیت اطلاعات حساس کیف پول خود، از بسته dotenv استفاده می کنیم.
$ npm install dotenv
مرحله 7: قرارداد سکه “Sunshine” را ایجاد کنید
مخزن پروژه را در ویرایشگر کد مورد علاقه خود باز کنید (به عنوان مثال VS Code). در contracts
پوشه، یک فایل جدید به نام ایجاد کنید SunshineCoin.sol
.
ما یک قرارداد ERC-20 می نویسیم که ویژگی های پیش فرض ارائه شده توسط OpenZeppelin را به ارث می برد و 10000 سکه را برای پخش کننده (یا مالک) قرارداد ضرب می کند. ما آن را “سکه آفتاب” فقط برای سرگرمی می نامیم!
ما همچنین میخواهیم عملکردی را پیادهسازی کنیم که به کیف پول اجازه میدهد 100 سکه را به صورت رایگان و بهصورت یکبار ضرب کند.
کد زیر را به آن اضافه کنید SunshineCoin.sol
.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract SunshineCoin is Ownable, ERC20 {
// Mapping to check if a wallet has claimed its free coins
mapping(address => bool) public hasClaimed;
constructor() ERC20("Sunshine COin", "SC") {
_mint(msg.sender, 1000000 * 10 ** ERC20.decimals());
}
// Let owner mint tokens freely
function mintTokens(uint _amount) public onlyOwner {
_mint(msg.sender, _amount * 10 ** ERC20.decimals());
}
// Let a wallet claim 100 tokens for free
function claimTokens() public {
require(hasClaimed[msg.sender] == false);
_mint(msg.sender, 100 * 10 ** ERC20.decimals());
hasClaimed[msg.sender] = true;
}
}
با اجرای زیر مطمئن شوید که قرارداد به درستی کامپایل شده است:
npx truffle compile
مرحله 8: پیکربندی Truffle را به روز کنید و یک فایل env
یک فایل جدید در دایرکتوری ریشه پروژه ایجاد کنید به نام .env
و مطالب زیر را اضافه کنید:
MNEMONIC = "<Your-MetaMask-Secret-Recovery-Phrase>"
در مرحله بعد، بیایید اطلاعاتی درباره کیف پول خود، نقطه پایانی Infura RPC و شبکه Linea به فایل پیکربندی Truffle خود اضافه کنیم. محتویات را جایگزین کنید truffle.config.js
با موارد زیر:
require('dotenv').config();
const HDWalletProvider = require('@truffle/hdwallet-provider');
const { MNEMONIC } = process.env;
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*"
},
linea: {
provider: () => new HDWalletProvider(MNEMONIC, `https://rpc.goerli.linea.build/`),
network_id: '59140',
}
}
};
مرحله 9: قرارداد را مستقر کنید
اجازه دهید اکنون یک اسکریپت بنویسیم تا قرارداد خود را در زنجیره بلاک Linea zkEVM مستقر کنیم.
در پوشه migrations یک فایل جدید به نام ایجاد کنید 1_deploy_contract.js
و کد زیر را اضافه کنید:
// Get instance of the Sunshine Coin contract
const lineaContract = artifacts.require("SunshineCoin");
module.exports = function (deployer) {
// Deploy the contract
deployer.deploy(lineaContract);
};
ما آماده ایم! قرارداد را با اجرای دستور زیر مستقر کنید:
truffle migrate --network linea
اگر همه چیز خوب پیش برود، باید خروجی (شامل آدرس قرارداد) را ببینید که چیزی شبیه به این است:
Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
Starting migrations...
======================
> Network name: 'linea'
> Network id: 59140
> Block gas limit: 30000000 (0x1c9c380)
1_deploy_contract.js
====================
Deploying 'SunshineCoin'
----------------------
> transaction hash: 0x865db376d1c8de21f4a882b9c0678e419708481eda4234a8f98c4f4975ee6373
> Blocks: 2 Seconds: 18
> contract address: 0x64ccE52898F5d61380D2Ec8C02F2EF16F28436de
> block number: 414030
> block timestamp: 1680726601
> account: 0xc361Fc33b99F88612257ac8cC2d852A5CEe0E217
> balance: 0.185605297028804606
> gas used: 1704607 (0x1a029f)
> gas price: 2.500000007 gwei
> value sent: 0 ETH
> total cost: 0.004261517511932249 ETH
> Saving artifacts
-------------------------------------
> Total cost: 0.004261517511932249 ETH
Summary
=======
> Total deployments: 1
> Final cost: 0.004261517511932249 ETH
توجه کنید که این استقرار چقدر ارزان بود! کارمزد تراکنش حداقل است. همچنین توجه داشته باشید که مراحلی که ما دنبال کردیم تقریباً مشابه کاری بود که در صورت استقرار در شبکه اصلی اتریوم انجام میدادیم.
مرحله 9: توکن خود را به MetaMask اضافه کنید
به عنوان آخرین مرحله، بیایید توکن خود را به MetaMask اضافه کنیم تا بتوانیم موجودی را ارسال، دریافت و مشاهده کنیم.
MetaMask را باز کنید و در قسمت assets در پایین روی آن کلیک کنید توکن ها را وارد کنید.
در اینجا از شما خواسته می شود که آدرس قرارداد و نماد توکن خود را اضافه کنید. پس از انجام این کار، باید بتوانید موجودی صحیح رمز خود را در برگه دارایی ها مشاهده کنید.
حفظ ساختمان با Linea
تبریک می گویم! شما با موفقیت یک قرارداد هوشمند را در شبکه آزمایشی Linea مستقر کرده اید. از آنجایی که Linea معادل EVM است، ما توانستیم از بهترین ابزارهای کلاس موجود برای توسعه بلاک چین استفاده کنیم. ما برای استفاده از راه حل zk-rollup یا توسعه برای Linea نیازی به یادگیری یک پشته کاملاً جدید نداشتیم.
مهمتر از آن، Linea به ما داد سرعت بسیار بهبود یافته و هزینه گاز پایین بر روی زنجیره اصلی این مقیاسگذاری و رمزنگاری اتریوم در بهترین حالت خود است – و گامی عظیم در جهت دسترسی بیشتر و قابل استفادهتر کردن بلاک چینها و برنامههای کاربردی برای تودهها است.
برای کسب اطلاعات بیشتر در مورد Linea و شروع ساخت برنامه ها، به مستندات اینجا مراجعه کنید. موارد استفاده زیادی وجود دارد که می توانید کاوش کنید، از جمله NFT، DeFi، صرافی های غیرمتمرکز و موارد دیگر. خوش بگذره!