راهنمای عملی EIP-7702: معاملات گروه ها و امتیازات را در اتریوم کنترل می کند

EIP-7702 نوع جدیدی از معامله را معرفی می کند که به کیف پول می دهد ائو (همچنین به عنوان شناخته می شود “کیف پول عادی”) به موقع تبدیل به قراردادهای هوشمند به روشی ساده ، از نیاز به ایجاد و حفظ کیف پولبشر این امر باعث پیشرفت های متنوعی در تجربه کاربر مانند گروه معاملات ، حمایت مالی گاز و پیکربندی امتیازات گرانول می شود.
در این مقاله ، ما دامنه EIP-7702 را بررسی خواهیم کرد و یک نمونه عملی را برای توسعه دهندگان ارائه می دهیم ، و بنابراین نشان می دهیم که چگونه می توان از آن برای گروه بندی معاملات استفاده کرد و به کاربران این امکان را می دهد تا چندین اقدام را در یک معامله واحد انجام دهند.
دامنه EIP-7702 و استفاده
بگذارید در موارد سه مورد مهم استفاده از EIP-7702 عمیق تر شود.
- 1. گروه بندی معاملات
این عملکرد با اجازه دادن به چندین عمل در یک معامله واحد ، تجربه کاربر را در هر DAPP بهبود می بخشد. بارزترین مورد استفاده تأیید و انتقال نشانه ها در یک مرحله است ، مانند تأیید اینکه DEX از نشانه های شما استفاده می کند و سپس مبادله را اجرا می کند. اما همچنین به کاربران این امکان را می دهد تا عملیات پیچیده ای را با یک کلیک انجام دهند ، مانند واریز وثیقه و گرفتن وام در یک معامله واحد یا تعامل با چندین پروتکل بدون امضای چندین بار. این نه تنها تجربه کاربر را بهبود می بخشد ، بلکه با به حداقل رساندن خطر خطاهای جزئی یا اعدام ، امنیت را افزایش می دهد.
حمایت مالی گاز با اجازه دادن به کاربران برای انجام معاملات بدون داشتن ETH در کیف پول خود برای پرداخت کمیسیون های گاز ، باعث می شود که اتریوم در دسترس تر باشد. کاربران یک معامله ایمن را امضا می کنند ، که به گونه ای منتشر می شود که یک اسپانسر گاز را برای آنها بپردازد و آن را به صورت زنجیره ای اجرا کند. حامیان مالی می توانند هزینه های خود را از طریق MECANIC های قبلی تعریف شده با EIP-7702 بازیابی کنند تا به آنها پاداش دهند تا معاملات را انجام دهند ، یا ممکن است به عنوان بخشی از یک استراتژی تجاری ، مانند DAPP هایی که گاز کاربران خود را پوشش می دهد ، برای ترکیب کاربران جدید و تشویق فرزندخواندگی بازپرداخت نشوند.
- 3. کنترل امتیازات دانه ای
همچنین به عنوان امتیازات شناخته می شود ، می توان آن را در کیف پول ها برای مشخص کردن کنترل های دسترسی یا هرگونه اقدام به طور کلی ادغام کرد. به عنوان مثال ، شما می توانید یک هزینه روزانه را ایجاد کنید که میزان نشانه هایی را که یک کیف پول می تواند هزینه کند ، تعیین می کند. از طرف دیگر ، می توانید تعامل را با قراردادهای هوشمند خاص تعیین و محدود کنید ، مانند این که به یک عامل بازرگانی AI اجازه می دهد فقط با جفت های خاص در DEXE های خاص تعامل داشته باشد. شما ممکن است در مورد این به عنوان یک کیف پول شخصی با ایمنی یک فکر کنید چند، اما به عنوان یک کیف پول استاندارد به همان اندازه ساده و بصری طراحی شده است.
استفاده: به دلایل امنیتی ، اجرای EIP-7702 باید در سطح کیف پول انجام شود ، نه در سطح برنامه. با این حال ، بسیار مهم است که هم توسعه دهندگان DAPPS و هم کاربران درک کنند که چگونه این عملکرد برای ساخت محصولات بهتر کار می کند و با اطمینان بیشتری از آنها استفاده می کند.
مثال عملی: اجرای و تعامل با قراردادها با استفاده از EIP-7702
در این مرحله به مرحله آموزش ، ما یک قرارداد آزمایشی را اجرا خواهیم کرد که در آن کاربران نشانه ها را واریز می کنند ، مشابه مبادله در Uniswap یا وثیقه سپرده در AAVE. به طور معمول ، این به دو معامله نیاز دارد: یکی تصویب قرارداد و دیگری برای واریز نشانه ها. با EIP-7702 ، ما نشان خواهیم داد که چگونه آنها را در یک معامله واحد گروه بندی کنیم.
مرحله 1: قراردادهای تست آزادی
در زمان نوشتن این مقاله ، EIP-7702 در حال حاضر در The Holesky Testnet اجرا شده است. به TestNet Holesky (همه چیز) وصل شوید.
متصل به هولسکی
ابتدا یک کیف پول مانند Metamk یا Rabby را به عنوان پسوند مرورگر نصب کنید. برای اتصال به HOLESKY می توانید با کلیک بر روی “اتصال به Metamk” یا با استفاده از جزئیات زیر ، این کار را از طریق juslist.org انجام دهید:
ابتدا گزینه اضافه کردن شبکه را از کیف پول خود انتخاب کنید.
گزینه اضافه کردن شبکه را از کیف پول خود انتخاب کنید
سپس داده های زیر را قرار دهید.
- نام شبکه: چابک
-
URL RPC:
https://1rpc.io/holesky
(نام می تواند خالی شود ، و یک URL کافی است) -
شناسه زنجیره ای:
17000
- نماد ارز: اخلاق
-
Block Explorer:
https://holesky.etherscan.io/
همچنین می توانید شبکه حیاط را به صورت دستی اضافه کنید.
بودجه TestNet را دریافت کنید
از شیر آب Alchemy دیدن کنید ، با یک حساب کیمیاگری وارد شوید و آدرس کیف پول اتریوم خود را قرار دهید (Metamask ، Rabby ، …). توجه داشته باشید که برای به دست آوردن بودجه آزمایشی باید حداقل 0.001 اتر (در Ethereum Mainnet) در آن کیف پول داشته باشید.
وارد شوید یا یک حساب کیمیاگری ایجاد کنید ، آدرس خود را قرار دهید و نشانه های تست رایگان دریافت کنید.
از طرف دیگر ، شما می توانید مستقیماً توسط Taggeando کاربر من وجوه بخواهید @turupawn
در Discord ، می توانید در جدیدترین ویدیوی YouTube من پیوند سرور من را پیدا کنید. در صورتی که لازم نیست ، می توانید از طریق اظهار نظر در فیلم ، از من بخواهید پیوند جدیدی از من بخواهید.
به یاد داشته باشید ، صندوق های آزمون TestNet ارزش پولی ندارند.
قرارداد واریز
این قرارداد به کاربران اجازه می دهد تا نشانه های ERC-20 را واریز و برداشت کنند.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IERC20 {
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
contract ERC20Deposit {
mapping(address => mapping(address => uint256)) public balances;
function deposit(address _token, uint256 _amount) external {
require(_amount > 0, "Amount must be greater than zero");
require(IERC20(_token).transferFrom(msg.sender, address(this), _amount), "Transfer failed");
balances[msg.sender][_token] += _amount;
}
function withdraw(address _token, uint256 _amount) external {
require(balances[msg.sender][_token] >= _amount, "Insufficient balance");
balances[msg.sender][_token] -= _amount;
require(IERC20(_token).transfer(msg.sender, _amount), "Transfer failed");
}
}
قرارداد ERC-20
این یک قرارداد ساده ERC-20 برای آزمایشات است.
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.22;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor() ERC20("MyToken", "MTK") {
_mint(msg.sender, 21000000 ether);
}
}
مرحله 2: نمایندگی کیف پول خود را پیکربندی کنید
قبل از ارسال معاملات ، کیف پول خود را برای تقلید پیکربندی خواهید کرد Multicall
، قراردادی که امکان گروه بندی معاملات را فراهم می کند.
متغیرهای محیط را پیکربندی کنید
جایگزین های زیر را انجام دهید YOUR_WALLET_ADDRESS
حرف YOUR_PRIVATE_KEY
با جزئیات کیف پول خود. وت YOUR_TOKEN_ADDRESS
حرف YOUR_DEPOSITERC20_ADDRESS
با دو قرارداد که تازه راه اندازی کرده اید.
my_wallet="YOUR_WALLET_ADDRESS"
my_wallet_pk="YOUR_PRIVATE_KEY"
# Dirección de Contratos que recién lanzaste
mytoken="YOUR_TOKEN_ADDRESS"
depositcontract="YOUR_DEPOSITERC20_ADDRESS"
multicall="0xcA11bde05977b3631167028862bE2a173976CA11"
# Vas a enviar un token, en formato wei
amount="1000000000000000000"
# Vas a conectarte a la red de Holesky
rpc_url="https://ethereum-holesky-rpc.publicnode.com"
ما کد فعلی کیف پول شما را مرور می کنیم
قبل از نمایندگی ، کد کیف پول شما باید برگردد 0x
بشر
cast code --rpc-url $rpc_url "$my_wallet"
هیئت EIP-7702 را اجرا کنید
Delega Tu Wallet برای عمل به عنوان قرارداد Multicall
بشر
cast send --rpc-url $rpc_url --from "$my_wallet" --private-key "$my_wallet_pk" --auth "$multicall" $(cast az)
نمایندگی خود را تأیید کنید
پس از نمایندگی ، کد کیف پول شما باید برگردد 0xef0100ca11bde05977b3631167028862be2a173976ca11
، کجا 0xef0100
این پیشوند هیئت است و ca11bde05977b3631167028862be2a173976ca11
جهت است Multicall
بشر
cast code --rpc-url $rpc_url "$my_wallet"
مرحله 3: با EIP-7702 معامله ارسال کنید
اکنون که کیف پول شما آماده است ، با EIP-7702 معامله گروه بندی را ارسال کنید.
ایجاد یک تماس خشک
اقدامات گروهی سه: توکن ها را تأیید کنید ، آنها را واریز کنید و تأیید را به 0 تنظیم کنید.
calls=()
calldata=$(cast calldata "approve(address spender, uint256 value)" "$depositcontract" "$amount")
calls+=("($mytoken, false, 0, $calldata)")
calldata=$(cast calldata "deposit(address _token,uint256 _amount)" "$mytoken" "$amount")
calls+=("($depositcontract, false, 0, $calldata)")
calldata=$(cast calldata "approve(address spender, uint256 value)" "$depositcontract" "0")
calls+=("($mytoken, false, 0, $calldata)")
ارسال معامله
اکنون معامله گروه بندی شده را اجرا کنید.
اگر از لینوکس استفاده می کنید این دستور را اجرا می کند.
cast send --rpc-url $rpc_url --from "$my_wallet" --unlocked "$my_wallet" "aggregate3Value((address,bool,uint256,bytes)[] calldata calls)" "[${calls[0]}, ${calls[1]}, ${calls[2]}]"
اگر از MACOS استفاده می کنید ، این اجرا می شود.
cast send --rpc-url $rpc_url --from "$my_wallet" --unlocked "$my_wallet" "aggregate3Value((address,bool,uint256,bytes)[] calldata calls)" "[${calls[1]}, ${calls[2]}, ${calls[3]}]"
شما باید بتوانید معاملات جمع شده خود را در Etherscan Holesky مشخص کنید self
بشر
پایان
EIP-7702 گام مهمی در جهت بهبود تجربه کاربر در اتریوم ، ساده سازی معاملات و اجازه کاربران به انجام چندین اقدام در یک معامله واحد است. EIP-7702 با اجازه دادن به EOA به طور موقت به عنوان قراردادهای هوشمند عمل می کند ، توابع مانند گروه بندی معاملات ، حمایت مالی و کنترل امتیازات دقیق را امکان پذیر می کند.
برای کسب اطلاعات بیشتر در مورد جزئیات فنی EIP-7702 ، به EIP اصلی مراجعه کنید ، در مورد تغییراتی که در به روزرسانی PECTRA به وجود می آید و به مکالمه در انجمن جادوگران Ethereum می پردازید ، توضیح می دهد.