تست های دارایی تعمیم یافته برای ERC4626 vaults PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

آزمایشات عمومی برای خزانه های ERC4626

همانطور که DeFi رشد می‌کند و بالغ می‌شود، زیرساخت‌های مقیاس‌پذیر و ترکیب‌پذیری برای توسعه‌دهندگان مهم است. درخواست‌های اتریوم برای نظرات (یا ERC) - ابزار استاندارد شده برای ساخت برنامه‌های مبتنی بر اتریوم، مانند استاندارد توکن‌های پرکاربرد ERC20 - نقش اساسی ارائه رهنمودهای ثابت برای توسعه دهندگان را ایفا می کند تا بدون شروع از صفر به اکوسیستم کمک کنند. در اوایل سال جاری، استاندارد طاق نمادین ERC4626 برای تشویق سازگاری متقابل بین توکن‌های بازده ایجاد شد. استاندارد کردن جزئیات پیاده‌سازی‌ها همچنین می‌تواند مشکلات فشرده‌پذیری را برطرف کند، و یکپارچه‌سازی پروتکل را آسان‌تر و در نهایت کمتر مستعد خطا کند.

چندین پروژه DeFi قبلاً انجام داده اند به تصویب رسید استاندارد، به دنبال افزایش ترکیب پذیری خزانه های آنها، و ما پیش بینی می کنیم که پذیرش گسترده تری در سراسر اکوسیستم داشته باشیم. با این حال، تطبیق طاق‌های موجود باعث ایجاد دردسرهایی در حال رشد می‌شود. به طور بحرانی، برخی از خطاهای پیاده سازی می توانند اهداف جدیدی را برای حمله در معرض دید قرار دهند. حتی خطاهای کوچک (به کوچکی تفسیر نادرست رابط استاندارد) می‌تواند پیامدهای مهمی هم برای امنیت و هم برای تجربه کاربر داشته باشد، که بر نیاز به ابزارها و اقدامات امنیتی بیشتر، به ویژه در یک اکوسیستم DeFi قابل‌ترکیب‌تر تأکید می‌کند. 

خوشبختانه، خطاهای ساده می توانند راه حل های نسبتاً ساده ای داشته باشند، اگر به خوبی قبل از سوء استفاده (و در حالت ایده آل قبل از اینکه حتی به کار گرفته شوند) شناسایی شوند. به همین منظور آزاد کردیم تست های ویژگی ERC4626 برای اجرای فازی و نمادین برای کمک به سازندگان طاق در تشخیص تخلفات استاندارد که ممکن است ادغام ها را شکسته یا منجر به آسیب پذیری های بعدی شود. در این پست، مشکل ایجاد انگیزه را توضیح می‌دهیم، رویکرد خود را مرور می‌کنیم و با چند توصیه عملی به پایان می‌رسانیم.

ابتدا کمی پس زمینه در مورد استاندارد ERC4626

در ماه مارس نهایی شد، ERC4626 استانداردی برای خزانه های نشانه گذاری شده است. این به منظور گسترش گسترده مورد استفاده معرفی شد ERC20 استاندارد (در حال حاضر پایه صدها توکن)، استانداردسازی را در خزانه‌های بازدهی تشویق کنید، و از ترکیب‌پذیری برنامه‌ها و پروتکل‌ها (مثلاً تجمیع‌کننده‌های بازده) که نیاز به تعامل با آنها دارند، اطمینان حاصل کنید. این بدان معنی است که هر برنامه ای که بر روی یک صندوق ERC4626 ساخته شده است را می توان به راحتی گسترش داد تا با هر صندوق ERC4626 دیگری کار کند. 

خزانه‌های توکن‌سازی شده به کاربران این امکان را می‌دهند که آزادانه دارایی‌ها را برای ضرب کردن سهام خزانه سپرده‌گذاری کنند و بعداً آن سهام را برای برداشت اصل و سود از صندوق بازخرید کنند. این سهام خزانه، توکن‌های ERC20 هستند و بنابراین می‌توانند به راحتی معامله شوند یا به عنوان وثیقه برای استقراض سایر دارایی‌ها استفاده شوند. به عنوان مثال، کاربران می‌توانند دارایی‌های خود را در خزانه‌های Yearn برای ضرب کردن توکن‌های yVault سپرده‌گذاری کنند، که سپس می‌توان آن‌ها را در Uniswap معامله کرد، برای بازدهی بیشتر سهام قرار داد، یا به عنوان وثیقه برای پروتکل‌های وام‌دهی استفاده کرد.

منطق تجاری برای تولید و توزیع بازده (و تعیین قیمت سهم) ممکن است در اجراها متفاوت باشد. استاندارد ERC4626 به منظور پوشش هرچه بیشتر خزانه‌ها (با هدف ایجاد قابلیت همکاری در مقابل یکسان)، بر توصیف رابط کاربری تمرکز می‌کند و بیشتر جزئیات پیاده‌سازی را نامشخص می‌گذارد. این اجازه می‌دهد تا زمانی که خزانه نیازهای خاص رابط را برآورده می‌کند، در منطق تجاری تغییراتی ایجاد کند و تشویق کند قابلیت همکاری در بسیاری از انواع مختلف برنامه ها و انواع خزانه های ERC4626.

با ایجاد خزانه های بیشتری، انتظار داریم از همان ابتدا شاهد اجرای آنها بر اساس استاندارد ERC4626 باشیم. اما ما در حال حاضر در یک مرحله انتقالی هستیم، جایی که توسعه دهندگانی که به دنبال استفاده از قابلیت ترکیب پذیری بیشتر هستند باید خزانه ها، برنامه ها و پروتکل های موجود را برای مطابقت با استاندارد به روز کنند. و با ارتقاء، با تعدادی از پیچیدگی ها و چالش ها دست و پنجه نرم می کنند. 

چالش های انطباق استاندارد (و مشکلات عدم انطباق)

پیروی از یک استاندارد جدید همیشه ساده نیست. هر طاق ERC4626 باید به طور صادقانه (و دقیقاً) الزامات استاندارد را همانطور که توضیح داده شد اجرا کند. در غیر این صورت، ادغام خزانه‌های ERC4626 برای در نظر گرفتن تغییرات مختلف پیچیده‌تر می‌شود. این پیچیدگی باعث می شود ادغام ها ذاتاً مستعد خطا باشند. و از آنجایی که آنها به اندازه کافی برای اثبات آینده نیستند، ممکن است در طول زمان منجر به آسیب پذیری های امنیتی شوند.

توکن‌های غیراستاندارد ERC20 (به عنوان مثال، Tether USD) به بسیاری از سیستم‌های DeFi نیاز دارند تا از یک کتابخانه اضافی (مانند SafeERC20) هنگام انجام انتقال توکن‌ها برای مقابله ایمن با رفتارهای متفاوت استفاده کنند (مثلاً وقتی انتقال موفقیت‌آمیز است به جای بازگرداندن، چیزی برگرداند. true). این بدان معناست که هر سیستمی که با این توکن‌ها تعامل داشته باشد، اگر سیستم برای رسیدگی درست به موارد «بازگشت‌های گمشده» طراحی نشده باشد، می‌تواند آسیب‌پذیر شود. این سناریوها به طور بالقوه می توانند یک دام امنیتی مشترک را معرفی کنند و هزینه های کلی توسعه و نگهداری را افزایش دهند (هنگامی که منطق اضافی و وابستگی های مورد نیاز برای کاهش مشکلات را در نظر بگیرید). بنابراین مطابقت با استاندارد نه تنها برای پیاده سازی های فردی بلکه برای امنیت کل اکوسیستم نیز ضروری است. یک آسیب‌پذیری در یک سیستم یا وابستگی می‌تواند مشکلات گسترده‌ای ایجاد کند.

در حالت ایده آل، استانداردها به طور رسمی و بدون ابهام مشخص می شوند (به عنوان مثال، مشخصات رسمی ERC20، و هر پیاده سازی می تواند به طور رسمی بر اساس مشخصات استاندارد تأیید شود. با این حال، در عمل، به دلیل هزینه و تلاش مورد نیاز جامعه، به راحتی در یک دوره زمانی کوتاه به دست نمی آید.

معرفی ویژگی های اجرایی ERC4626 برای شناسایی مسائل مربوط به انطباق 

همانطور که ما به سمت یک حالت ایده آل کار می کنیم (هر خزانه ای که به طور رسمی بر اساس مشخصات رسمی دقیق تأیید می شود)، استاندارد ERC4626 را نوشته ایم. املاک برای کشف اختلافات در جزئیات ظریف و آسان از دست دادن الزامات استاندارد.  

توسعه‌دهندگان Vault می‌توانند آزمایش‌ها را برای شناسایی نقض‌های استاندارد احتمالی در پیاده‌سازی‌هایشان قبل از استقرار اجرا کنند. و یکپارچه سازهای خزانه می توانند بررسی کنند که آیا خزانه های داده شده از استاندارد پیروی می کنند یا خیر. ویژگی‌ها را می‌توان در برابر خزانه‌های زنده که قبلاً در شبکه اصلی مستقر شده‌اند، از طریق آزمایش چنگال شبکه اصلی آزمایش کرد. آزمایش خزانه‌های زنده ممکن است مفید باشد - به‌ویژه زمانی که خزانه‌ها اخیراً مستقر یا ارتقا یافته باشند - برای اطمینان از اینکه تمام پارامترهای سیستم به درستی تنظیم شده‌اند. 

ما تست‌های مبتنی بر ویژگی را انتخاب کردیم - که در Foundry نوشته شده بود و آماده اجرا توسط fuzzer آن بود - تا ویژگی‌ها را قابل اجرا (و در نتیجه آزمایش‌پذیر) کنیم. در آینده، آنها همچنین ممکن است با اجرای نمادین یا ابزارهای بررسی مدل اجرا شوند تا به طور رسمی تأیید شود که خزانه داده‌شده ویژگی‌های همه ورودی‌ها و شرایط ممکن را برآورده می‌کند.

ما ویژگی ها را به گونه ای نوشتیم که به اندازه کافی عمومی باشند تا در طیف گسترده ای از خزانه ها که منطق تجاری متفاوتی را پیاده سازی می کنند، اعمال شوند. ما فقط از توابع رابط عمومی استفاده کردیم تا آنها را نسبت به جزئیات پیاده سازی ناشناس کنیم. (با این حال، به دلیل این محدودیت، الزامات استاندارد خاصی که به داده‌های داخلی خاص پیاده‌سازی اشاره می‌کنند، از ویژگی‌ها حذف شدند.)

به عنوان مثال، ویژگی زیر با یکی از الزامات مربوطه مطابقت دارد convertToShares() تابع، "بسته به تماس گیرنده نباید هیچ گونه تغییری را نشان دهد" با توجه به دو آدرس حساب و مبلغ، هر یک از حساب ها را فراخوانی می کند convertToShares() با همان مقدار، و اطمینان حاصل می کند که دو مقدار بازگشتی برابر هستند. این ویژگی مستقل از جزئیات پیاده سازی است convertToShares()، که در بین خزانه ها متفاوت است و باید توسط هر خزانه ای که ERC4626 را پیاده سازی می کند ارضا شود. این ویژگی را می توان با ارائه مقادیر ورودی خاص (برای آزمایش واحد)، ورودی های تصادفی زیادی (برای آزمایش فازی)، یا مقادیر نمادین (برای اجرای نمادین و تأیید رسمی) اجرا کرد. همچنین می توان آن را به صورت محلی یا در برابر یک چنگال شبکه اصلی (برای آزمایش یکپارچه سازی) اجرا کرد.

Use case: ویژگی هایی که خطاهای گرد کردن را آزمایش می کنند

برای مثال، خطاهای گرد کردن، دسته مهمی از اشکالات (به ظاهر جزئی) هستند که می توانند پیامدهای سری داشته باشند. منطق حسابداری زیربنایی ERC4626، به عنوان مثال، محاسبه تعداد سهامی که باید ضرب شود، یا مقدار دارایی هایی که باید برداشت شوند، با استفاده از محاسبات نقطه ثابت اجرا می شود - خطاهای گرد کردن اجتناب ناپذیر است. برای تیم امنیت لاتاریبا این حال، استاندارد به صراحت جهت گرد کردن ترجیحی را برای هر تابع رابط مشخص می کند، در حالی که محدوده خطا را نامشخص و وابسته به اجرا می گذارد. به طور خاص، deposit() و redeem() توابع باید an را برگردانند زیر-تقریبی از مقدار دقیق، در حالی که mint() و withdraw() توابع باید an را برگردانند روی-تقریبی به عنوان مثال، اگر قیمت فعلی سهم (یعنی مقدار دارایی هر سهم) 2 باشد، پس deposit() با 3 وزن دارایی فقط باید حداکثر 1 وی سهام (یعنی floor(3/2))، در حالی که withdraw() با 3 وی از دارایی باید حداقل 2 وی از سهام را بسوزاند (یعنی ceil(3/2)).

ما ویژگی‌های مربوط به گرد کردن را نوشتیم تا مستقل از منطق حسابداری زیربنایی باشند و آن را به عنوان یک جعبه سیاه در نظر بگیریم. به طور خاص، ما آن‌ها را به‌عنوان ویژگی‌های به اصطلاح «رفت و برگشت» فرموله کردیم، که رابطه بین دو تابع متضاد را توصیف می‌کند. برای مثال، ویژگی زیر مشخص می‌کند که برداشت دارایی‌هایی که به‌تازگی با ضرب N سهام به امانت سپرده شده‌اند، نباید کمتر از N سهم بسوزانند. به عبارت دیگر، هیچ‌کس نمی‌تواند با تبدیل دارایی‌ها و سهام خزانه‌ای که به طور مکرر ضرب و برداشت می‌کند، سود آزاد به دست آورد.

قطعه ای از تست های ویژگی ERC4626

در واقع، ما دریافتیم که چندین خزانه ERC4626 در شبکه اصلی به دلیل خطاهای گرد کردن، ویژگی فوق را برآورده نمی‌کنند. این بدان معناست که هر کسی می‌تواند برای مثال چند بیت کوین ساتوشی (1 ساتوشی ~ 0.02 سنت در زمان نگارش مقاله) به سادگی (و به طور مکرر) برش و برداشت، و به آرامی خالی کردن خزانه کسب کند. این ممکن است در واقع برای زنجیره‌هایی که از هزینه‌های گاز بسیار پایین بهره می‌برند (مثلاً Fantom)، یا اگر قیمت دارایی به اندازه کافی در آینده بالا برود، سود ایجاد کند.

تست استاندارد ERC4626 در طبیعت

ما خواص خود را در برابر 100 طاق ERC4626 در شبکه اصلی آزمایش کردیم و بسیاری از خزانه‌ها را یافتیم که از الزامات استاندارد پیروی نمی‌کردند - بیشتر به دلیل خطاهای گرد کردن (مثلاً استفاده از گرد کردن کف در جایی که سقف مورد نظر است، همانطور که توضیح دادیم). به طور خاص، برخی از خزانه ها نتوانستند تعداد دقیق سهام درخواست شده توسط این شرکت را تعیین کنند mint() عملکرد، اگرچه استاندارد به صراحت نیاز دارد این. برخی از آنها نیز ناسازگاری را منتشر کردند Deposit رویدادی که در آن داده‌های ثبت‌شده با آنچه در واقع استخراج شده است متفاوت است. در کمال تعجب، برخی از خزانه‌ها هرگز در آن جا ساخته نشدند. در عوض، آنها فقط درخواست های منت را در یک صف قرار می دهند و بعداً آنها را در یک دسته به عنوان یک تراکنش جداگانه پردازش می کنند.

اگرچه این رفتارهای متفاوت به خودی خود قابل بهره برداری نبودند، اما ممکن است زمانی که در سیستم های دیگری که فقط رفتارهای استاندارد را انتظار دارند، ادغام شوند، آسیب پذیر شوند. این مسائل ادغام خزانه را بسیار سخت‌تر می‌کند و به طور بالقوه تلاش‌های جاری را خنثی می‌کند و انگیزه‌های پشت استانداردسازی را محرک می‌کند.

با استفاده از آزمایش‌های دارایی ما، و سایر گام‌های عملی برای انطباق استاندارد

پیروی دقیق از استاندارد می تواند از رفتارهای متفاوت (به طور ایده آل قبل از به کارگیری آنها) جلوگیری کند. امیدواریم خواص ما همراه با چند آیتم اقدام اضافی کمک کند. برای کسانی که در حال توسعه و/یا ادغام خزانه های ERC4626 هستند:

  • ما به شدت توصیه می کنیم ملک خود را اداره کنید تست در برابر خزانه های شما در صورت مشاهده هرگونه نقض آشکار استاندارد، آنها به سرعت مشکلات را پیدا خواهند کرد.
  • ما همچنین پیشنهاد می کنیم ما را بررسی کنید املاک درک خود از الزامات استاندارد را بررسی کنید و در صورت وجود هر گونه اختلاف ناخواسته، اجرای خود را تنظیم کنید.
  • اگر خزانه شما باید از استاندارد فاصله داشته باشد، توصیه می‌کنیم رفتارهای غیراستاندارد را به‌طور واضح مستندسازی کنید تا دیگران بتوانند به درستی این انحرافات را هنگام ادغام با صندوق شما کنترل کنند. لطفا توجه داشته باشید که این باید به عنوان آخرین راه حل در نظر گرفته شود.

***
خزانه‌های ERC4626 این پتانسیل را دارند که در آینده‌ای قابل پیش‌بینی به یک بلوک ساختمانی مهم برای DeFi تبدیل شوند - و به‌منظور ترکیب‌پذیری، پیروی از استاندارد برای خزانه‌های جدید و موجود مهم است. پیاده‌سازی‌های جدید با پیروی از استاندارد ظاهر می‌شوند، بنابراین زمانی بهتر از زمان حال برای استاندارد کردن خزانه‌های موجود وجود ندارد. 

همانطور که ما به سمت یک حالت ایده آل کار می کنیم (جایی که خزانه های مختلف به طور یکنواخت قابل ترکیب هستند)، آزمایش های ویژگی ERC4626 را می توان برای تشخیص آسان تر نقض استاندارد در اجرای خزانه اجرا کرد. تست‌های دارایی (با مستندات و مثال‌ها) همگی در Github ما در دسترس عموم هستند مخزن. ما از بازخورد و مشارکت شما استقبال می کنیم!

***
نظرات بیان شده در اینجا نظرات پرسنل AH Capital Management, LLC ("a16z") نقل شده است و نظرات a16z یا شرکت های وابسته به آن نیست. برخی از اطلاعات موجود در اینجا از منابع شخص ثالث، از جمله از شرکت‌های سبد سرمایه‌ای که توسط a16z مدیریت می‌شوند، به‌دست آمده است. در حالی که a16z از منابعی گرفته شده است که قابل اعتماد هستند، اما a16z به طور مستقل چنین اطلاعاتی را تأیید نکرده است و هیچ گونه نمایشی در مورد صحت فعلی یا پایدار اطلاعات یا مناسب بودن آن برای یک موقعیت خاص ارائه نمی کند. علاوه بر این، این محتوا ممکن است شامل تبلیغات شخص ثالث باشد. aXNUMXz چنین تبلیغاتی را بررسی نکرده و محتوای تبلیغاتی موجود در آن را تایید نمی کند.

این محتوا فقط برای مقاصد اطلاعاتی ارائه شده است و نباید به عنوان مشاوره حقوقی، تجاری، سرمایه گذاری یا مالیاتی به آن اعتماد کرد. شما باید در مورد این موارد با مشاوران خود مشورت کنید. ارجاع به هر گونه اوراق بهادار یا دارایی دیجیتال فقط برای مقاصد توضیحی است و به منزله توصیه یا پیشنهاد سرمایه گذاری برای ارائه خدمات مشاوره سرمایه گذاری نیست. علاوه بر این، این محتوا برای هیچ سرمایه‌گذار یا سرمایه‌گذار بالقوه‌ای هدایت نشده و برای استفاده از آن در نظر گرفته نشده است، و تحت هیچ شرایطی نمی‌توان هنگام تصمیم‌گیری برای سرمایه‌گذاری در هر صندوقی که توسط a16z مدیریت می‌شود، به آن اعتماد کرد. (پیشنهاد سرمایه گذاری در یک صندوق a16z فقط توسط یادداشت قرار دادن خصوصی، قرارداد اشتراک و سایر اسناد مربوط به هر صندوق انجام می شود و باید به طور کامل خوانده شود.) هر گونه سرمایه گذاری یا شرکت پرتفوی ذکر شده، ارجاع شده، یا شرح داده شده نشان دهنده همه سرمایه گذاری ها در وسایل نقلیه تحت مدیریت a16z نیست، و نمی توان اطمینان داشت که سرمایه گذاری ها سودآور هستند یا سایر سرمایه گذاری های انجام شده در آینده ویژگی ها یا نتایج مشابهی خواهند داشت. فهرستی از سرمایه‌گذاری‌های انجام‌شده توسط صندوق‌های تحت مدیریت آندریسن هوروویتز (به استثنای سرمایه‌گذاری‌هایی که ناشر مجوز افشای عمومی a16z و همچنین سرمایه‌گذاری‌های اعلام‌نشده در دارایی‌های دیجیتالی عمومی را ارائه نکرده است) در https://a16z.com/investments موجود است. /.

نمودارها و نمودارهای ارائه شده در داخل صرفاً برای مقاصد اطلاعاتی هستند و هنگام تصمیم گیری برای سرمایه گذاری نباید به آنها اعتماد کرد. عملکرد گذشته نشان دهنده نتایج آینده نیست. محتوا فقط از تاریخ مشخص شده صحبت می کند. هر گونه پیش بینی، تخمین، پیش بینی، هدف، چشم انداز، و/یا نظرات بیان شده در این مطالب بدون اطلاع قبلی ممکن است تغییر کند و ممکن است متفاوت یا مغایر با نظرات بیان شده توسط دیگران باشد. لطفاً برای اطلاعات مهم بیشتر به https://a16z.com/disclosures مراجعه کنید

تمبر زمان:

بیشتر از آندرسن هورویتز