
کیفپولهای قرارداد هوشمند و انتزاع حساب: خط اجرای ERC-4337
کیف پولهای قرارداد هوشمند و انتزاع حساب، فعالیت کیف پول اتریوم را از قوانین ثابت تراکنش EOA به یک خط لوله برنامهپذیر منتقل میکنند که در آن یک UserOperation شبیهسازی، قیمتگذاری و تنها بعداً به یک تراکنش زنجیرهای توسط یک bundler تبدیل میشود. ERC-4337 طراحی غالب لایه کاربردی برای این است و قفل واقعی درک واسطههای جدید، APIها و حالتهای شکست به جای حفظ ویژگیهای UX است.
نکات کلیدی
- ERC-4337 شیء تراکنش معمولی را با یک UserOperation که در یک mempool جداگانه قرار دارد تا زمانی که یک bundler آن را از طریق handleOps EntryPoint به زنجیره اضافه کند، جایگزین میکند.
- Bundlerها انتخاب و اجرای روترها هستند، نه انتقالدهندههای غیرفعال، زیرا آنها عملیات را شبیهسازی میکنند، ریسک اسپم را مدیریت میکنند و انتخاب میکنند چه چیزی را بستهبندی کنند.
- ERC-7769 روشهای JSON-RPC کیف پول↔bundler مانند eth_sendUserOperation و eth_getUserOperationReceipt را استاندارد میکند و قابلیت جابجایی bundler و ردیابی بهتر رسیدها را امکانپذیر میسازد.
- انتزاع حسابسطوح جدیدی از DoS و هزینه محاسباتی ایجاد میکند، بنابراین قوانین اعتبارسنجی، سیستمهای شهرت و سختسازی تولید مانند مسدود کردن نقاط پایانی debug_* بخشی از مدل امنیتی میشود.
چگونه کیف پولهای قرارداد هوشمند از EOAها متفاوت هستند
دو نوع حساب مختلف در یک صفحه اتریوم ظاهر میشوند: یک EOA که تراکنش را بهطور مستقیم امضا میکند و یک حساب قرارداد که تنها زمانی که کد اجرا میشود، کاری انجام میدهد. یک کیف پول قرارداد هوشمند آن حساب قرارداد را به کیف پول اصلی تبدیل میکند، بنابراین بررسیهای امضا، قوانین nonce و منطق اجرا قابل برنامهریزی میشوند.
این هسته انتزاع حساب است و در نقشه وسیعتری از انواع کیف پولهای کریپتو قرار دارد: "کیف پول" دیگر فقط یک جفت کلید و یک شمارنده nonce نیست.نتیجه فوری این است که ویژگیهای کیف پول دیگر بهطور سختافزاری در قوانین EOA پروتکل کدگذاری نمیشوند. یک حساب هوشمند میتواند طرحهای امضا مختلفی را بپذیرد، سیاستهای هزینهکرد را اجرا کند یا اقداماتی را پشت چندین شرط قرار دهد زیرا اعتبارسنجی کد است. اینجاست که ویژگیهایی مانند بازیابی اجتماعی و دسته وسیعتری از کیف پولهای بدون بذر و بازیابی اجتماعی به وجود میآید. جزئیات مهم این است که این ویژگیها در پایین مدل اجرا قرار دارند، نه خود مدل.در اتریوم، مسیر غالب به سمت انتزاع حساب ERC-4337 است که بهطور صریح بهعنوان سطح کاربردی به جای تغییر در لایه اجماع چارچوببندی شده است. این چارچوب مهم است زیرا به زنجیره تأمین تراکنش جدیدی به جای بازنویسی پروتکل اشاره میکند. "عملکرد کیف پول" دیگر مترادف با "یک تراکنش که به mempool عمومی پخش میشود" نیست. این تبدیل به یک شیء نیت میشود که به یک عامل گنجاندن نیاز دارد.لایه عامل گنجاندن جایی است که بیشتر توضیحات تنبل میشوند. مدل ذهنی مفید این نیست که "یک تراکنش عادی با مراحل اضافی". مدل مفید این است که "یک بازار تراکنش موازی" با mempool خود، روترهای خود و محدودیتهای عملیاتی خود است.جریان عملیات کاربر ERC-4337
یک UserOperation بهتنهایی به زنجیره نمیرسد. این خارج از زنجیره زندگی میکند تا زمانی که یک bundler تصمیم بگیرد که ارزش تبدیل به یک تراکنش زنجیرهای را دارد. تعاریف ERC-7769 توالی را صریح میکند: در جریانهای ERC-4337، تراکنشهای کاربر با اشیاء UserOperation جایگزین میشوند و یک bundler یک یا چند UserOperation را جمعآوری کرده و آنها را در یک تماس handleOps به قرارداد EntryPoint ارسال میکند.
این خط لوله یک ترتیب تمیز از رویدادها دارد:
1. کیف پول یک UserOperation میسازد که آنچه کاربر میخواهد انجام دهد و چگونه هزینهها پوشش داده میشود را کدگذاری میکند. 2. UserOperation به یک گره mempool UserOperation ارسال میشود که آن را اعتبارسنجی و شبیهسازی میکند قبل از اینکه آن را بپذیرد. 3. یک bundler UserOperationهای پذیرفتهشده را انتخاب کرده، آنها را بستهبندی کرده و یک تراکنش زنجیرهای را با تماس به EntryPoint.handleOps ارسال میکند. 4. EntryPoint عملیات را اجرا میکند و زنجیره یک رسید تراکنش عادی برای بسته به علاوه نتایج هر UserOperation تولید میکند.
تز "بازار موازی" در مرحله 3 ظاهر میشود. گنجاندن و قیمتگذاری دیگر بهطور خالص مشکل کاربر در تنظیم maxFeePerGas و انتظار نیست. bundler هزینه محاسباتی و ریسک انتخاب را به عهده میگیرد. به همین دلیل است که برخی توسعهدهندگان استدلال میکنند که ارزش کلیدی ERC-4337 یک بازار هزینه غیرمتمرکز برای عملیات کاربر است که به کیف پولهای قرارداد هوشمند میرود، نه فقط UX بهتر.
این همچنین جایی است که "انتزاع حساب توضیح داده شده" معمولاً اشتباه میکند. شیئی که کاربر امضا میکند تضمینی برای تبدیل به یک تراکنش نیست. کاربر میتواند همه چیز را بهدرستی انجام دهد و هنوز هم شامل نشود اگر bundlerها آن را انتخاب نکنند، اگر شبیهسازی شکست بخورد یا اگر عملیات منقضی شود. وضعیت صحیح UX این است که هش UserOperation را بهعنوان ابزار ردیابی اصلی تا زمان گنجاندن در نظر بگیرد، سپس آن را به هش تراکنش بسته بعد از واقعیت نگاشت کند.
APIها و ابزارهای کیف پول به bundler
ERC-4337 تنها زمانی در مقیاس قابل استفاده میشود که کیف پولها بتوانند بهطور استاندارد با bundlerها صحبت کنند. این چیزی است که ERC-7769 اضافه میکند: یک سطح JSON-RPC که ارگونومی ارسال تراکنش عادی اتریوم و جستجوی رسید را منعکس میکند، اما برای UserOperations.
روشهای اصلی که ERC-7769 تعریف میکند، همانهایی هستند که تصمیمات ادغام روزمره را تغییر میدهند:
1. eth_sendUserOperation یک UserOperation را به mempool UserOperation ارسال میکند. کلاینت آن را اعتبارسنجی و شبیهسازی میکند و باید تنها در صورتی که شبیهسازی را گذرانده و به استخر پذیرفته شده باشد، یک userOpHash برگرداند. 2. eth_estimateUserOperationGas فیلدهای "گاز" را برای یک UserOperation تخمین میزند، با نادیده گرفتن امضا برای اهداف تخمین. 3.
eth_getUserOperationByHash به کیف پول اجازه میدهد تا بپرسد آیا یک عملیات در حال انتظار، گنجانده شده یا ناشناخته است و متاداده گنجاندن مانند blockNumber و transactionHash را در صورت موجود بودن برمیگرداند. 4. eth_getUserOperationReceipt یک رسید برای هر عملیات پس از گنجاندن برمیگرداند، شامل actualGasCost، actualGasUsed و یک پرچم موفقیت، در حالی که همچنین رسید Transaction بسته را برمیگرداند. 5.
eth_supportedEntryPoints به کیف پول میگوید که کدام آدرسهای EntryPoint را bundler پشتیبانی میکند، که اولین بررسی قابلیت جابجایی است که یک backend کیف پول باید انجام دهد.
این داستان زیرساخت ساکت است: استانداردسازی چیزی است که بازار رقابتی bundler را ممکن میسازد. اگر یک کیف پول با ERC-7769 صحبت کند، میتواند backendهای bundler را بدون بازنویسی کل منطق ارسال و ردیابی خود تعویض کند. این "غیرمتمرکزسازی" از طریق رابط است، نه از طریق شعار.
ERC-7769 همچنین یک خط سخت بین تست و تولید ترسیم میکند. این روشهای debug_ را برای توسعه و تست سازگاری تعریف میکند و مشخص میکند که این روشهای JSON-RPC debug_ باید در سرورهای تولید مسدود شوند. این ادب نیست. این بخشی از مدل امنیتی برای هر کسی است که زیرساخت عمومی AA را اداره میکند.
ERC-7769 همچنین بهطور صریح به پشتیبانی eip 7702 در شیء UserOperation در شبکههایی که فعال شده است، از طریق یک tuple eip7702Auth اشاره میکند. منابع ارائه شده جزئیات نهایی دامنه یا وضعیت فعالسازی eip 7702 را در شبکهها مشخص نمیکنند، اما کار رابط در ERC-7769 نشان میدهد که لولهکشی کیف پول↔bundler در حال طراحی برای سازگاری با آن جهت است.
ایمنی mempool، شبیهسازی و ریسکهای DoSشبیهسازی مرکز هزینهای است که باعث میشود انتزاع حساب مانند اجرای یک موتور تطبیق به جای یک جعبه RPC غیرفعال احساس شود. ERC-7769 در این مورد صریح است: اداره یک گره عمومی تولید ERC-4337 از نظر محاسباتی سنگین است و ممکن است هدف DoS باشد. این معامله برای داشتن یک mempool UserOperation جداگانه است که در آن گرهها باید قبل از پذیرش عملیاتها اعتبارسنجی و شبیهسازی کنند.سطح DoS ساختاری است.
یک بازیگر مخرب میتواند عملیاتی را ارسال کند که ارسال آن ارزان اما شبیهسازی آن گران است و باعث میشود bundlerها و گرههای mempool مجبور به سوزاندن محاسبات شوند. ERC-7769 به کاهشها از طریق قوانین اعتبارسنجی ERC-7562 و مکانیزمهای شهرت اشاره میکند که برای جلوگیری از پذیرش UserOperationهای بهطور مخرب طراحی شدهاند و شهرت شرکتکنندگان را ردیابی میکنند.
اصرار همان سند بر مسدود کردن debug_* در تولید یک کاهش عملی دیگر است، زیرا نقاط پایانی debug میتوانند رفتارهای بازنشانی حالت و بستهبندی اجباری را که در آزمایشها مفید و در اینترنت باز خطرناک هستند، افشا کنند.
ERC-5189 وجود دارد زیرا سلامت mempool بخش سخت است و از زاویهای متفاوت به این مشکل حمله میکند. این انتزاع حساب را از طریق یک ساختار Operation و قراردادهای "تأییدکننده" پیشنهاد میکند و بهطور صریح از انواع تراکنشهای جدید در لایه اجماع اجتناب میکند در حالی که با کیف پولهای قرارداد هوشمند موجود سازگار باقی میماند.
کار تأییدکننده کمک به bundlerها در فیلتر کردن "عملیاتهای خوب" از "عملیاتهای بد" در یک mempool عملیات اختصاصی است.مکانیسم کلیدی در ERC-5189 این است که تأییدکننده آمادگی و اطلاعات وابستگی را برمیگرداند. آن سیگنالدهی وابستگی به bundlerها میگوید که چه تغییرات وضعیتی باید باعث ارزیابی مجدد شود، که راهی برای جلوگیری از پوسیدگی یک mempool با عملیاتهایی است که دیگر معتبر نیستند. ERC-5189 هنوز از قید اصلی فرار نمیکند: bundlerها باید قبل از گنجاندن، اجرای شبیهسازی شده را خارج از زنجیره انجام دهند و اپراتورهای mempool میتوانند تأییدکنندگانی را که بدرفتاری میکنند، ممنوع کنند. طراحی در حال مذاکره بر سر همان معامله بین باز بودن و مقاومت در برابر اسپم است، فقط با لولهکشی متفاوت.مسیرهای رقیب برای انتزاع حساب
توسعهدهندگان اتریوم در حال بحث درباره این نیستند که آیا کیف پولهای قرارداد هوشمند مفید هستند یا نه. آنها در حال بحث درباره این هستند که کدام مسیر به پیشفرض بلندمدت تبدیل میشود و چه معاملههایی قابل قبول است.
یک خط شکست قابل مشاهده EIP-3074 در مقابل ERC-4337 است، با استدلالهایی که 3074 میتواند بهبودهای UX فوریتری ارائه دهد در حالی که گروه 4337 بر ویژگیهایی مانند مقاومت در برابر سانسور و بهطور حیاتی، بازار هزینه غیرمتمرکز برای عملیات کاربر تأکید میکند.این بحث برای سازندگان مهم است زیرا معنای "زیرساخت کیف پول" را تغییر میدهد.
ERC-4337 پیچیدگی را به یک بازار تراکنش موازی میبرد: UserOperations، bundlerها، EntryPoint، قوانین شبیهسازی، سیستمهای شهرت و اکنون RPC استاندارد شده از طریق ERC-7769. آن پشته میتواند بدون یک انشعاب سخت پروتکل تکامل یابد، اما همچنین واسطههای جدیدی ایجاد میکند که انگیزهها و زمان فعالیت آنها بخشی از تجربه کاربر میشود.دلیل دیگر وجود چندین پیشنهاد این است که "انتزاع حساب" یک اصطلاح سطل است.
برخی پیشنهادها بر روی ارسال نیت و بازارهای گنجاندن تمرکز دارند. دیگران بر روی چگونگی احساس کردن حسابهای قرارداد مانند EOAها بدون مجبور کردن هر کیف پول به ارتقاء تمرکز دارند. هدف سازگاری ERC-5189 صریح است: پشتیبانی از پیادهسازیهای موجود کیف پول قرارداد هوشمند بدون نیاز به ارتقاء دستی هر نمونه کیف پول.
منابع همچنین eip 7702 را بهعنوان یک جهت جدید معرفی شده در مه 2024 توسط ویتالیک بوترین و دیگران علامتگذاری میکنند، که بهعنوان پرداختن به محدودیتهای رویکرد سطح کاربردی چارچوببندی شده است. مواد ارائه شده شامل جزئیات مشخصات eip 7702 نیست، بنابراین تنها نتیجه مسئولانه آگاهی از دامنه است: اکوسیستم در حال ساخت رابطهایی است، مانند tuple اختیاری eip7702Auth در ERC-7769، که تغییر را پیشبینی میکند.
مفاهیم غلط رایج درباره کیف پولهای قرارداد هوشمند و انتزاع حساب
"انتزاع حساب یک ارتقاء پروتکل است که حسابهای اتریوم را تغییر میدهد." ERC-4337 بهعنوان سطح کاربردی چارچوببندی شده است، به این معنی که تغییر نمیدهد که پروتکل اتریوم خود چگونه به حسابها نگاه میکند. پروتکل هنوز EOAها و حسابهای قرارداد را میبیند. انتزاع توسط قراردادها و زیرساختهای خارج از زنجیره ساخته میشود.
"Bundlerها فقط انتقالدهنده هستند." یک انتقالدهنده یک تراکنش را جلو میبرد. یک bundler اعتبارسنجی و شبیهسازی را اجرا میکند، انتخاب میکند که کدام UserOperations را بپذیرد و آنها را در یک تماس handleOps به EntryPoint بستهبندی میکند. این نقش انتخاب است که چرا bundlerها در معرض DoS قرار میگیرند و چرا مکانیزمهای شهرت و فیلتر در استانداردها ظاهر میشوند.
"AA عمدتاً درباره بازیابی اجتماعی و کلیدهای جلسه است." اینها ویژگیهای کیف پول هستند که وقتی اعتبارسنجی برنامهپذیر است، آسانتر میشوند و بازیابی اجتماعی یک مثال رایج است. تفاوتی که ساختار بازار را تغییر میدهد، خط لوله UserOperation + bundler + EntryPoint و mempool جداگانهای است که به آن اشاره دارد.
"ردیابی مانند هشهای tx عادی کار میکند." ERC-7769 بهطور صریح روشهای by-hash و رسید را برای UserOperations اضافه میکند زیرا معنای tx-hash تا زمانی که یک bundler عملیات را گنجانده باشد، اعمال نمیشود. کیف پولهایی که ارسال را بهعنوان نهایی در نظر میگیرند، وضعیتهای معلق شکسته و مدیریت شکست گیجکنندهای را ارسال خواهند کرد.
گرفتن
من تیمهایی را دیدهام که "تجربه کاربری حساب هوشمند" را ارائه میدهند که در دموها زیبا به نظر میرسد و سپس تحت بار شکست میخورد زیرا آنها ERC-4337 را مانند یک تراکنش عادی با ظاهری زیبا در نظر میگیرند. اشتباه پرهزینه نادیده گرفتن لایه گنجاندن است. یک UserOperation یک سفارش در یک مکان جداگانه است و تنها زمانی که یک bundler تصمیم به مسیریابی آن از طریق EntryPoint.handleOps میگیرد، به یک تراکنش زنجیرهای تبدیل میشود.
اگر یک رویکرد وجود داشته باشد که زمان را صرفهجویی کند، آن ساختن بر اساس زیرساخت است: روشهای ERC-7769 برای ارسال و ردیابی دریافت، وضعیتهای معلق صریح و قابلیت حمل bundler از طریق eth_supportedEntryPoints. در سمت زیرساخت، من دیدهام که افراد نقاط پایانی debug_* را در سرورهای عمومی افشا میکنند و وقتی مورد سوءاستفاده قرار میگیرند، متعجب میشوند. ERC-7769 به دلایلی این موضوع را مطرح میکند. انتزاع حساب یک بازار تراکنش موازی است و بازارها جریانهای خصمانه را جذب میکنند.
منابع
پیشنهادات بهبود اتریوم
پیشنهادات بهبود اتریوم
غیر زنجیرهای
blockcryptowriter.medium.com
پرسشهای متداول
تفاوت بین EOA و کیف پول قرارداد هوشمند چیست؟
یک EOA یک تراکنش استاندارد اتریوم را به طور مستقیم امضا و پخش میکند، با قوانین اعتبارسنجی ثابت. یک کیف پول قرارداد هوشمند یک حساب قرارداد است، بنابراین قوانین اعتبارسنجی و اجرا میتوانند برنامهریزی شوند که اساس انتزاع حساب است.
انتزاع حساب ERC-4337 چگونه در واقع یک تراکنش را به زنجیره میآورد؟
کیف پول یک UserOperation را به یک ممپول جداگانه ارسال میکند، جایی که اعتبارسنجی و شبیهسازی میشود. سپس یک bundler UserOperationها را انتخاب میکند تا شامل شود و یک تراکنش زنجیرهای به قرارداد EntryPoint ارسال میکند که آنها را از طریق handleOps اجرا میکند.
یک bundler در ERC-4337 چه کاری انجام میدهد؟
یک bundler UserOperationها را جمعآوری میکند، اعتبارسنجی و شبیهسازی را اجرا میکند و تصمیم میگیرد چه چیزی را در یک بسته قرار دهد. سپس بسته را در یک تماس handleOps به EntryPoint ارسال میکند و هزینه محاسبات و ریسک انتخاب را بر عهده میگیرد.
کدام متدهای JSON-RPC کیف پولها برای ارسال و پیگیری UserOperationها استفاده میکنند؟
ERC-7769 متدهایی از جمله eth_sendUserOperation، eth_estimateUserOperationGas، eth_getUserOperationByHash، eth_getUserOperationReceipt و eth_supportedEntryPoints را تعریف میکند. این متدها به کیف پولها اجازه میدهند تا عملیات را ارسال کنند، گاز را تخمین بزنند و با استفاده از userOpHash پیگیری کنند به جای اینکه فرض کنند معنای tx-hash است.
EIP-7702 چیست و چگونه به انتزاع حساب مربوط میشود؟
منابع ارائه شده EIP 7702 را به عنوان یک جهتگیری جدید معرفی شده در مه 2024 توسط ویتالیک بوترین و دیگران برای رفع محدودیتهای AA در سطح برنامه توصیف میکنند. ERC-7769 شبکههایی را پیشبینی میکند که در آن EIP 7702 با اجازه دادن به یک UserOperation برای شامل کردن یک tuple eip7702Auth فعال میشود، اما منابع در اینجا وضعیت نهایی طراحی یا استقرار را مشخص نمیکنند.