Абстрагування рахунку прагне покращити враження користувачів та розробників по всьому екосистемі Ethereum. Помимо того, що робить досвід взаємодії з ланцюжком більш доступним та приємним для користувачів, це також дає розробникам можливість робити більш потужні речі на Ethereum та обслуговувати користувачів ще більш цікавим способом.
Наша класифікація підходів до абстрагування рахунків така:
Цей підхід має механізми, які дозволяють EOA переходити до CA, не переміщуючи свої активи, такі як EIP 7377 та EIP 5003(при урахуванні разом з EIP 3074).
Раніше було запропоновано різні проекти для створення розумних рахунків та утвердження абстрагування рахунку на рівні протоколу; EIP-86 та EIP-2938Однак, було багато заперечень через сприйняті складності, які вводить такий дизайн, і дещо більшості вважають, що Ethereum не готовий до такої складності.
Після відродження теми Віталіка після Злиття,ERC-4337було запропоновано як версія з можливістю вибору стандарту розумного рахунку, схожа на інфраструктуру PBS (розділення пропонента-будівельника) для MEV (максимально видобувної вартості). Таким чином, користувачі, які прагнуть отримати переваги розумних рахунків, можуть просто використовувати трубопровід ERC-4337 для переозначення логіки свого рахунку та правил валідності транзакцій у структурах, які називаються UserOperation (або UserOps у скороченому вигляді).
ERC 4337 принесе переваги розумних рахунків в сучасному Ethereum, не втілюючи в себе ніякої складності, функціонуючи як позапротокольна альтернатива утвердженим розумним рахункам. Однак це не означає, що інфраструктура оптимальна в поточному стані, оскільки її власна складність все ще є значним пунктом вразливості.
Щоб вирішити цю складність,RIP 7560було розроблено як утверджена версія інфраструктури ERC 4337 в Ethereum та його L2, щоб вона успадковувала схеми сопротиві деяким мережам замість того, щоб визначати новий набір правил (як це робить ERC 4337 з ERC 7562.
У цьому звіті ми зосередимося на вивченні програмованості EOA, оцінюючи різні EIP, які описують рішення в цьому напрямку, і обговорюємо їх переваги та недоліки. У частинах 2 і 3 цієї серії ми розглянемо два класи інших підходів до абстракції облікового запису, які досліджуються в Ethereum.
Для того, щоб знайти, що може бути абстраговано, нам потрібна (дещо) повна картина поточного дизайну рахунків. Цей розділ в основному слугуватиме своєрідним переглядом того, що насправді є рахунками в Ethereum і як їх транзакції перевіряються та виконуються.
Рахунки Ethereum - це сутності з балансом ефіру (ETH) і здатністю надсилати транзакції в блокчейн Ethereum. Вони представлені у вигляді 42-значного шістнадцяткового «адреси», яке служить унікальним вказівником на рахунок та транзакції рахунку.
Адреса діє як ключ до стану триєвого ланцюжка. Листові вузли цього триє є структурами даних рахунків, які можна розкласти на чотири поля:
Зміст цих чотирьох полів використовується для визначення типу рахунку і, в кінцевому рахунку, визначає масштаб його функціональності. Таким чином, два типи рахунків Ethereum:
EOA мають порожні поля codeHash та storageHash і можуть бути контрольовані лише тими, хто володіє приватними ключами. Їх адреси можна отримати з відповідного відкритого ключа, дописавши "0x" до останніх двадцяти символів хешу keccak-256 відкритого ключа рахунку.
їхні транзакції повністю базуються на витягуванні та підґрунті на логіці їх розгорнутого коду.
Оскільки ці облікові записи можуть контролюватися лише їх вмістом коду, вони не потребують приватного ключа і мають лише публічний ключ. Таким чином, будь-який агент, який має здатність оновлювати / змінювати вміст коду контракту, зможе отримати доступ до його балансу.
Адресу CA отримують з адреси його створювача та його nonce до моменту розгортання контракту.
Транзакції
Нещодавно ми описали рахунки як сутності, що мають здатність надсилати транзакції через Ethereum. Таким чином, ми можемо розуміти, що основною метою рахунку є надсилання та отримання транзакцій, тоді як блокчейн виступає як реєстр, що записує історію транзакцій, а також описує, як транзакції змінюють поля рахунків на основі правил, описаних в специфікації протоколу блокчейну.
Так що це за "транзакції"?
Транзакції - це операції, що надсилаються з рахунку і призводять до зміни "стану" мережі. Вони є криптографічно підписаними інструкціями від рахунків, що при виконанні призводять до оновлення стану на всій мережі.
Відсутність дозволу супроводжується вартістю неправильних стимулів, для вирішення цього необхідно встановити жорсткі вимоги (або правила валідності) для взаємодії в таких середовищах.
У цьому контексті транзакції повинні дотримуватися певних правил дійсності, щоб вважатися дійсними та виконуватися. Більшість цих правил дійсності реалізовані за допомогою обмежень, накладених на рахунок, що відправляє транзакцію, і залежать від типу цього рахунку.
На Ethereum ЕОА оптимізовані для зручності використання, оскільки вони призначені для кінцевих користувачів. Вони можуть надсилати транзакції в певному порядку та працювати автономно. Їх також можна створити локально, найбільш поширений метод - використання постачальників гаманців, таких як MetaMask, Rainbow, Rabby тощо.
З іншого боку, контрактні рахунки можуть надсилати лише транзакції, дозволені їх логікою, у відповідь на їх виклик. Крім того, їх може створити лише EOA, який має достатній баланс для оплати зберігання свого стану.
Більш високорівневим описом буде те, що ЕОА може мати лише баланс, тоді як КО може мати як баланс, так і логіку, яка визначає, як цей баланс може бути витрачений.
Ці властивості залежать від наступних логічних параметрів, які визначають правила, яким повинні відповідати транзакції рахунку:
Ці параметри призначені для жорсткості для зовнішньо контрольованих облікових записів (EOA):
Загалом, логіка виконання ЗВТ обмежує їх до одної транзакції на дійсний підпис.
З іншого боку, CAs мають більшу гнучкість у цих параметрах:
У більшості практичних випадків логіка, що використовується в цьому випадку, є схемою багато-підписового підпису, яка передбачає, що для того, щоб зміна логіки ЦЗ була дійсною, потрібно M з N дійсних підписів (де M < N) від певних рахунків (зазвичай ЕОА),.
Оцінюючи ці функції, ми спостерігаємо, що кожен тип рахунку розроблений таким чином, щоб мати компроміс між автономією та програмованістю.
EOA мають повну автономію, але обмежену програмованість; вони можуть авторизувати та відправляти транзакції в будь-який час, але ці транзакції повинні відповідати жорсткому формату, щоб вважатися дійсними. CA мають повну програмованість (лише обмежена конструкцією EVM), але обмежену автономію; їхні транзакції не обов'язково повинні відповідати жодному жорсткому формату, але можуть бути відправлені тільки через виклик їхньої логіки.
У наступному підрозділі ми зараз вивчимо наслідки цих виборів дизайну, щоб повністю зрозуміти пропозицію кожного обговореного EIP протягом цієї серії.
Тепер, коли у нас є дещо лаконічний знання функціональності різних облікових записів, ми легко можемо ідентифікувати їх привабливість, а також проблеми, які вони створюють як для користувачів, так і для розробників на Ethereum.
Як ми вже згадували раніше, EOA розроблені як першокласні облікові записи, орієнтовані на кінцевих користувачів. Додатки розроблені таким чином, щоб легко взаємодіяти з ними, вони майже не складні, і, звичайно, їх створення не вимагає витрат. Однак його простота супроводжується значною втратою новизни, оскільки вони розроблені таким чином, щоб бути строго детермінованими.
Деякі з проблем щодо них:
Не всі хочуть (або можуть) завжди утримувати ETH (я маю на увазі подивіться на ту цінову динаміку), тому раціональними рішеннями було б дозволити використання кількох газових валют (занадто складно, порушує занадто багато невід'ємних умов, як описано в розділі "Валюта").тут), або щоб дозволити вирішення платежів за газ за допомогою іншого рахунку, який не є походженням транзакції.
Наприкінці спектру рахунку CAs націлені на розробників та більш технічну аудиторію користувачів. Вони служать як засоби для розумних контрактів (тобто ми вважаємо розумними контрактами їх вміст логіки або коду) і тому можуть реалізувати нові формати транзакцій, що забезпечуються EVM.
Проте, для всіх цих функцій вони є прославленими обліковими записами другого класу, оскільки вони не мають автономії. Деякі з їх недоліків такі:
Оглянувши дизайнерські вибори, які призвели до проблем, визначених у цьому підрозділі, ми тепер можемо перейти до оцінки запропонованих рішень.
Концепція абстрагування рахунку (принаймні через розумні рахунки) завжди була невід'ємною частиною дорожньої карти Ethereum. Легенда говорить, що складність, пов'язана з її реалізацією, загрожувала подальшому затриманню запуску Ethereum, тому була відкинута на поточний дизайн з різними рахунками, що пропонують різні функціональні можливості. Вона знову затрималася через фокус Ethereum на The Merge, і тепер знову з'являється як головна частина наступного великого оновлення мережі - Pectra. Однак її складність все ще вважається значним недоліком, що заважає її увіковічненню, особливо з урахуванням того факту, що Ethereum переключився на розкрут-центричну дорожню карту.
Вимоги тепер двохкрокові:
Інтуїтивно ця концепція відіграє більшу роль у контексті ланцюгової абстракції та інтероперабельності, однак наша сфера застосування в цьому звіті обмежена технічними ініціативами, вжитими для досягнення самої абстракції облікового запису.
Абстрагування рахунку має на меті поєднати кращі риси EOAs та CAs в новий стандарт рахунку - розумні рахунки, які дозволяють повне або часткове розділення правил дійсності будь-якого рахунку на логіку перевірки та виконання; так що рахунки можуть визначати свої власні правила дійсності - за дозволом EVM - так само, як рахунки контрактів, залишаючись при цьому повністю автономними, як зовнішньо-власні рахунки.
Часто виникає плутанина навколо відмінностей між розумними рахунками та гаманцями для розумних контрактів, тому дозвольте явно описати ці відмінності нижче:
Комерціалізація гаманців з розумними контрактами полегшила прийняття CAs більш широким ринком, дозволяючи менш технічним користувачам скористатися їх функціями. Однак вони все ще зіткнуться з пастками, пов'язаними з CAs.
Повернемося до розмови; Раніше ми вже розглядали параметри, які використовуються для визначення правил валідності операцій з рахунками:
Значення перших чотирьох параметрів можуть колективно називатися логікою підтвердження рахунку, які є перевірками, які відбуваються перед початком виконання транзакції.
Останній параметр визначає, як повинен виконуватися транзакція.
У вступі ми надали загальний огляд поточного ландшафту AA у вигляді певного виду класифікації для різних запропонованих рішень. Тепер ми зосередимося на першому класі рішень проблеми рахунку Ethereum - програмованості EOA.
Найбільша привабливість Ethereum полягає в його молодій, але живій екосистемі DeFi, яка включає в себе різноманітні децентралізовані додатки, які є його основними ліквідними стоками. Більшість цих DApps оптимізовані для обслуговування EOAs, тому їх важко інтегрувати з CAs та, в кінцевому підсумку, зі смарт-рахунками. Хоча смарт-контрактні гаманці справді допомагають CAs у цьому випадку, вони мають свої власні обмеження та зовсім інший UX.
Тимчасове рішення, яке досліджується, поки як DApps, так і постачальники гаманців звикають до розумного стандарту рахунку, полягає в наданні тимчасових покращень до ЗЕР, які дозволяють їм подолати більшість їх накладених обмежень, будь то їх перевірка або логіка виконання.
Нижче ми розглянемо технічні характеристики трьох основних EIP, які надають можливості для програмованості EOA; від менш відомого EIP 5806до амбіційногоEIP 3074а в кінці кінців до переможцяEIP 7702.
Ця пропозиція спрямовується на надання більшої функціональності стандарту EOA, дозволяючи йому виконувати делеговані виклики до логіки рахунку контракту (його смарт-контракт). Це фактично призводить до виконання смарт-контракту в контексті EOA викликача, тобто EOA залишається під контролем своєї логіки перевірки, тоді як логіка виконання обробляється відповідною логікою CA.
Перш ніж ми продовжимо далі, давайте здійснимо поїздку по пам'яті розвитку Ethereum доEIP-7.
EIP-7 запропонував створення опкоду 0xf4/DELEgateCALL, який використовується для відправлення повідомлень у першинний рахунок з логікою вторинного рахунку, зберігаючи значення полів [sender] та [value] першинного рахунку.
Іншими словами, основний рахунок «успадковує» (або позичає, якщо ви бажаєте) логіку вторинного рахунку на певний термін, як вказано в виклику повідомлення, щоб логіка останнього виконувалася в контексті першого.
Ця операційний код дозволяв розробникам додатків розділяти логіку своєї програми на кілька смарт-контрактів, забезпечуючи взаємозалежність, щоб вони могли легко обійти обмеження розміру коду та обмеження газу.
Добре, тому які делеговані виклики дозволяють залежність СА? Ну, EIP-5806 використовує EIP-7 як натхнення для запропонування розширення функціональності делегованого виклику для ЕОА, тобто дозволяємо також ЕОА бути залежними від СА, тому що ні.
EIP 5806 introduces a new Сумісний з EIP-2718тип транзакції, який упакований наступним чином:
rlp([chainID, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, data, access_list, signature_y_parity, signature_r, signature_s]).
Ці транзакції розроблені так, щоб поле [to] - яке представляє адресу одержувача - може приймати лише адреси як 20-байтові вхідні дані, що вимикає відправника від використання опкоду CREATE.
Мотивація кожного компонента схеми РЛП полягає в наступному:
Хоча упаковка транзакцій EIP-5806 в конверти EIP-2718 дозволяє їм бути дуже зворотно сумісними, зовнішні облікові записи (EOAs) не еквівалентні CA. Тому деякі обмеження повинні бути визначені щодо того, як EOA використовує делеговані виклики, щоб запобігти порушенню незмінності.
Ці обмеження спрямовані на наступні опкоди:
Основна застосовність EIP 5806 - це абстрагування виконання для EOAs. Дозволяючи EOAs взаємодіяти надійно з розумними контрактами поза простими викликами до їхньої логіки, це надає їм функції, такі як:
Зміни, запропоновані EIP-5806, хоча й дозволяють необхідні функції, не є особливо новаторськими; її існування в основному засноване на вже функціональному EIP-7. Це дозволяє йому обійти багато потенційних перешкод для прийняття.
Одним з основних побоювань, висловлених на самому початку його існування, був потенційний ризик надання EOA доступу до сховища та можливості змінювати його, так само, як це роблять CAs. Це порушує багато мережевих невід'ємних властивостей, що стосуються того, як EOAs повинні здійснювати транзакції, тому це було вирішено шляхом введення обмежень, згаданих у попередньому підрозділі.
Друге зауваження (яке є палицею з двома кінцями) – це простота EIP-5806; є певна думка, що винагорода за прийняття EIP-5806 може бути не варта витрат, оскільки це дозволяє лише абстракцію виконання, а не багато іншого. Будь-яке інше обмеження валідності залишається визначеним мережею для EOA, які погоджуються на EIP-5806, на відміну від інших дещо схожих EIP, які ми обговорюємо в наступних підрозділах.
EIP-3074 пропонує дозволити зовнішнім обліковим записам делегувати більшу частину логіки перевірки їхніх спеціалізованим контрактним рахункам, які називаються викликачами, шляхом накладання логіки авторизації останніх на них для конкретних форм транзакцій.
Воно досягає цього, передаючи свою політику доступу на викликаючий контракт, який потім відповідає за визначення політики доступу до EOA.
Цей EIP пропонує додати до EVM два нових опкоди:
Ці два опкоди дозволяють EOA делегувати контроль за попередньо встановленою CA та виступати як один через неї, не розгортаючи контракт і не несучи пов'язані з цим витрати та зовнішності.
EIP-3074 дозволяє транзакціям використовувати формат підпису [MAGIC], щоб запобігти зіткненню з іншими форматами підпису транзакцій. Активний рахунок, до якого передаються інструкції [AUTHCALL], визначається як поле контекстної змінної з іменем [authorized], яке зберігається лише протягом однієї транзакції і мусить бути визначене заново для кожного нового [AUTHCALL].
Перед тим, як займатися складнощами кожного опкоду, це сутності, що беруть участь у транзакції EIP-3074:
Контракти Invoker отримують повідомлення [AUTH] зі значенням [COMMIT] від [authority]; це значення визначає обмеження, які обліковий запис бажає накласти на виконання [authorized] інструкцій [AUTHCALL].
Таким чином, інвокери відповідають за забезпечення того, що [contract_code], визначений у [authorized] рахунку, не є шкідливим і має здатність задовольнити невід'ємність, встановлену головним підписаним рахунком в [COMMIT] значенні.
Опкод [AUTH] має три вхідні елементи стеку; або, ще простіше, він визначається трьома входами, які обчислюють один вихід. Ці вхідні дані:
Останні два входи використовуються для опису діапазону змінної пам'яті від 0 до 97, де:
Змінні [yParity], [r] та [s] інтерпретуються колективно як підпис ECDSA, [magic], на кривій secp256k1 над повідомленням:
[keccak256 (MAGIC || chainID || nonce || invoker address || COMMIT)]
де:
Якщо обчислений підпис дійсний, а адреса підписувача дорівнює [повноваження], поле [authorized] оновлюється до значення, наданого [authority]. Якщо будь-яка з цих вимог не виконується, поле [authorized] залишається незмінним у попередньому стані або як незадане значення.
Вартість газу для цієї опкоди обчислюється як сума:
[AUTH] реалізовано так, щоб не змінювати пам'ять, і бере значення [authority] як аргумент, щоб було легко перевірити його значення з наданою підписом.
Операція [AUTHCALL] має сім вхідних елементів стеку, які використовуються для обчислення одного вихідного елемента стеку.
Він має ту саму логіку, що й код операції [CALL], тобто; Він використовується для відправки повідомлень-дзвінків в обліковий запис і запуску певної логіки в його контрактах. Єдине відхилення в їхній логіці полягає в тому, що [AUTHCALL] призначений для встановлення значення [CALLER], перш ніж приступити до виконання.
Отже, [AUTHCALL] використовується [authority], щоб спричинити контекст-залежну поведінку в [authorized] з логічними перевірками, які відбуваються наступним чином:
Вартість газу для [AUTHCALL] обчислюється як сума:
Доступ до даних, що повертаються з [AUTHCALL], здійснюється через:
Щоб все це зібрати разом з набагато меншою кількістю технічних термінів; транзакції Ethereum зазвичай вказують два значення:
У ЗРР, як вже зазначалося, авторизація тісно пов'язана з виконанням, тобто (tx.origin == msg.sender). Цей простий незмінний дає поштовх більшості проблем, які ми пояснили в підрозділі «Рахунки та валідність транзакцій» цього звіту.
Повідомлення [AUTH] від [authority] дозволяє змінювати функцію tx.origin на [authorized], залишаючись при цьому msg.sender. Крім того, воно дозволяє встановлювати обмеження цього привілею з використанням значення [COMMIT].
[AUTHCALL] потім дозволяє [authorized] отримати доступ до логіки контракту, використовуючи [invoker] як посередника, щоб забезпечити, що контракт, до якого він хоче отримати доступ, є безпечним. Тобто для кожного [AUTHCALL] [authorized] повинен вказати певний [invoker] для їхнього [COMMIT].
EIP 3074 в основному відповідає за те, що дозволяє ЕОА делегувати свою логіку авторизації іншому рахунку, проте його відкрите виконання дозволяє здійснювати набагато більше в різних контекстах.
Весь логіка перевірки EOA може бути абстрагована шляхом застосування різних обмежень/інновацій до викликача за потреби, деякі з можливих конструкцій, засновані на їх цільовій логіці, включають:
Крім того, логіка виконання інтуїтивно абстрагована; нарешті, ініціатор (який є CA) тепер відповідає за виконання запитів на транзакції від імені EOA.
Цитуючиодин з авторів: «Я не очікував би, що гаманці надають функціональність для підписування довільних викликачів ...». Можливо, найбільша проблема, яку ставить ініціатива 3074, полягає в тому, що інновації на його основі дуже легко нахиляться до дозволених та власних потоків угод; так само, як поточні ітерації ринків MEV та PBS Ethereum.
За замовчуванням контракти викликувача потребують великої перевірки, щоб запобігти ще гіршим атакам, ніж це можливо зараз. Це неодмінно призведе до екосистеми, де лише кілька контрактів викликувача, розроблених впливовими особами, будуть прийняті як типові для розробників гаманців. Таким чином, це сводиться до компромісу між вибором важкого децентралізованого шляху постійної перевірки та підтримки контрактів викликувача на ризик безпеки користувачів; або просто прийняття контрактів викликувача від встановлених та поважних джерел з кращими гарантіями безпеки для користувачів та меншим наглядом за безпечністю контракту.
Ще один аспект цієї точки - це функція вартості, пов'язана з проектуванням, аудитом та маркетингом функціонального та безпечного інвокера. Менші команди майже завжди будуть перевершені більшими організаціями, особливо в маркетинговій сфері, які вже мають певну встановлену репутацію, навіть якщо їх продукт кращий.
EIP-3074 закріплює схему підпису ECDSA, оскільки вона все ще вважається більш дійсною, ніж схема авторизації, введена через invoker. Хоча є аргументи, що квантова стійкість на даний момент не є визначальною проблемою, і що в майбутньому, коли ECDSA може бути скомпрометованим, буде набагато гірше; неофіційною метою Ethereum є завжди бути попереду таких проблем. Ймовірне, що відмова від квантової і цензурної стійкості на користь маргінальних поліпшень UX може не бути найкращим вибором у найближчому майбутньому.
Ще одна точка у сприятливому аргументі - це те, що поки переваги 3074 ще оцінюються, ERC-4337 (який не потребує жодних змін протоколу) вже має великий ринок, тому ви також повинні бути сумісні з ним, щоб уникнути компартментації екосистеми.
Навіть з дорожньою картою нативної абстракції рахунку, опкоди [AUTH] та [AUTHCALL] з часом стануть застарілими в EVM, що призведе до значного технічного боргу Ethereum, аби досягти незначного покращення UX.
Після відправки повідомлення [AUTH] і делегування контролю, очікується, що EOA уникне звичайної схеми авторизації за допомогою закритого ключа, оскільки відправка «звичайної» транзакції призводить до анулювання дозволу, який вона делегувала кожному викликачу.
Отже, схема ECDSA залишається суворо кращою за будь-яку іншу схему авторизації, яку можуть дозволити пов'язані контракти, що означає, що втрата приватних ключів призведе до повної втрати активів рахунку.
Ця пропозиція спочатку була висунута як дещо мінімалістична варіація EIP 3074, і буланавіть мали на увазібути оновленням до цього. Він був створений, щоб вирішити якісь неефективності EIP 3074, особливо щодо питань навколо його несумісності з вже процвітаючою екосистемою 4337 та пропозицією про абстрагування рахунку – RIP 7560.
Його підхід полягає в додаванні нового типу транзакції, сумісного з EIP 2718 - [SET_CODE_TX_TYPE] - який дозволяє EOA вести себе як розумний рахунок для визначених транзакцій.
Цей дизайн дозволяє використовувати ті ж функції, що й EIP 5806, і ще кілька, зберігаючи сумісність з дорожньою картою абстракції рахунку та існуючими ініціативами.
EIP-7702 дозволяє ЕОА «імпортувати» вміст коду контракту через транзакцію, сумісну з 2718 [SET_CODE_TX_TYPE] форматом:
rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, value, data, access_list, authorization_list, signature_y_parity, signature_r, signature_s])
Цей навантаження цілком схожий на той з EIP 5806, за винятком того, що він вводить "список авторизації". Цей список - це впорядкована послідовність значень формату:
[[chain_id, address, nonce, y_parity, r, s], …]
де кожна кортеж визначає значення [адреси].
Перед продовженням сторони, що беруть участь у SET_CODE_TX_TYPE, є:
Коли [authority] підписує SET_CODE_TX_TYPE, вказуючи [address], створюється делегатний покажчик. Це є «програма-вказівник», яка призводить до того, що всі запити на отримання коду, спричинені діями [authority] у будь-який момент, будуть направлені на спостережний код [address].
Для кожної кортежної [chain_id, address, nonce, y_parity, r, s], логічний потік транзакції типу 7702 виглядає наступним чином:
Фух! Щоб пов'язати все назад; цей EIP дозволяє EOAs надсилати транзакції, які встановлюють вказівник на код контракту, що дозволяє їм реалізувати цю логіку в подальших транзакціях. Таким чином, він строго сильніший, ніж EIP 5806, оскільки дозволяє EOAs фактично мати вміст коду стільки часу, скільки вони хочуть (на відміну від EIP 5806, який просто дозволяє EOAs відсилати делеговані виклики).
Хоча можна стверджувати, що це вже не абстракція, оскільки EOA активно приймає логіку, яку вона бажає виконати, вона все ще не є «первинним власником» цієї логіки. Крім того, вона не містить безпосередньої логіки, вона просто вказує на вказівник до логіки (щоб зменшити обчислювальну складність). Тому ми йдемо з абстракцією виконання!
Хоча інваріант require(msg.sender == tx.origin) порушений для дозволу самоспонсорства, EIP все ще дозволяє інтеграцію підтримуваних пересилань транзакцій. Однак, застереження полягає в тому, що таким пересилальникам потрібна система, заснована на репутації або стейкі, щоб запобігти атакам на грифінг.
ЕОА можуть вказувати лише на певну частину коду рахунку, щоб тільки логіка цієї частини була виконувана в їх контексті.
Це також дозволяє існування підключень, які дозволяють "зниження привілеїв", так що конкретні dAPPs мають доступ лише до балансу рахунку за певних умов. Наприклад, можна уявити дозвіл на витрату токенів ERC-20, але не ETH, або на витрату до 1% від загального балансу на день, або лише на взаємодію з певними додатками.
Через свою невибіркову природу транзакція EIP-7702 може дозволити користувачеві отримати доступ до опкоду CREATE2 та використовувати його для розгортання байткоду на адресу без будь-яких інших обмежувальних параметрів, таких як логіка ринку комісій (наприклад, EIP-1559 та EIP-4844). Це дозволяє відновлювати адресу та використовувати її на різних станових машинах з однаковим байткодом, де її рахунок на кожному ланцюжку відповідає за визначення інших контекстних змінних параметрів.
Хоча EIP-7702 ще досить недавній, вже було здійснено багато прототипування та тестування його залежностей та потенційних недоліків, але його мінімалістична модель гарантує йому багато гнучкості та, отже, корисності в різних контекстах. Однак він порушує занадто багато невід’ємних умовностей і не є безпосередньо сумісним з попередніми версіями.
Деякі з його логіки включають:
Більшість користувачів не мають розуміння дійсного вмісту рахунку (або навіть різниці між рахунком та адресою!), тому дозволити колізії адрес означає, що EOA може виступати як CA та приваблювати кошти користувачів у довготривалій боротьбі, щоб в кінці кінців вкрасти все. EIP-3607 вирішує це, вимагаючи, щоб рахунки, які містять код, не могли витрачати свій баланс, використовуючи свою власну логіку авторизації. Однак EIP 7702 порушує цей інваріант, щоб дозволити EOAs залишатися автономними навіть після отримання певної рівня програмованості.
Підписування адреси облікового запису замість його вмісту коду, по суті, схоже на схему 3074 з викликачами. Воно не забезпечує строгих гарантій щодо однорідності вмісту коду між ланцюжками, оскільки адреса може мати різний вміст коду на різних ланцюжках. Це означає, що адреса, вміст коду якої містить ту саму логіку на одному ланцюжку, може бути хижою або відкрито шкідливою на іншому ланцюжку, що може призвести до втрати коштів користувача.
EOA в їх поточній формі сьогодні суттєво обмежені, оскільки вони не дозволяють користувачам скористатися можливостями програмованості, що пропонуються EVM. Хоча існують різні шляхи оновлення облікових записів, як ми вказали на початку цього звіту, обране рішення повинно дотримуватися принципів безпечного та надійного самостійного зберігання. Крім того, оновлення EOA може значно вплинути як на користувацький досвід, так і на розробників додатків, тому всі голоси заінтересованих сторін повинні бути враховані.
Дозволяючи ЕОА виконувати код будь-яким чином надзвичайно розширює функціональність рахунків, проте ця нова виразність іде разом зі значущими ризиками та можливими сліпими зонами. Вирішення цих компромісів є критичним для забезпечення оновлення з неперевершеними користувацькими перевагами для користувачів Ethereum.
Культура відкритої дискусії в Ethereum робить його великим майданчиком для таких інновацій, оскільки майже кожна імплікація кожного дизайну ретельно розбирається предметними експертами. Це комплексне розглядання повинно допомогти зменшити ризики злочинної поведінки з боку супротивників.
EIP-7702 наразі є обличчям рекламної кампанії для механізмів, які прагнуть надати можливість програмування EVM для EOAs, оскільки його було визначено як заміну слоту EIP 3074 в оновленні Pectra. Він успадковує відкритий дизайн механізму 3074, значно зменшуючи площу атаки / ризики. Він також дозволяє значно більше, уникнувши обмежень 3074 для певних класів опкодів.
Хоча деякі вдосконалення ще виконуються в дизайні пропозиції, вона вже зібрала багато доброзичливості та підтримки від розробників, особливо оскільки сам Віталік підтримує її безпосередньо.
У спільноті є твердження, що такий підхід до абстрагування рахунку може бути навіть кращим, ніж розумні рахунки. Цей коментар підкреслює, що цей шлях потребує менше змін і не є таким складним, і що ЕОА вже закріплені. Однак, ми повинні пам'ятати про майбутній віхідний пункт щодо квантової стійкості на кожному рівні мережі Ethereum. Ця квантова безпека неможлива з поточною основною моделлю рахунку через використання схем авторизації EOA на основі ECDSA.
Отже, програмованість EOA слід розглядати як крок по шляху до розумних рахунків, а не як пункт призначення. Вона підсилює EOA та забезпечує кращий досвід користувача та розробника, залишаючись сумісною з остаточною метою абстракції рахунку розумних рахунків.
У нашому наступному звіті ми спробуємо дослідити схеми міграції EOA, щоб побачити, наскільки вони підходять для дорожньої карти абстрагування рахунку, слідкуйте за оновленнями!
Абстрагування рахунку прагне покращити враження користувачів та розробників по всьому екосистемі Ethereum. Помимо того, що робить досвід взаємодії з ланцюжком більш доступним та приємним для користувачів, це також дає розробникам можливість робити більш потужні речі на Ethereum та обслуговувати користувачів ще більш цікавим способом.
Наша класифікація підходів до абстрагування рахунків така:
Цей підхід має механізми, які дозволяють EOA переходити до CA, не переміщуючи свої активи, такі як EIP 7377 та EIP 5003(при урахуванні разом з EIP 3074).
Раніше було запропоновано різні проекти для створення розумних рахунків та утвердження абстрагування рахунку на рівні протоколу; EIP-86 та EIP-2938Однак, було багато заперечень через сприйняті складності, які вводить такий дизайн, і дещо більшості вважають, що Ethereum не готовий до такої складності.
Після відродження теми Віталіка після Злиття,ERC-4337було запропоновано як версія з можливістю вибору стандарту розумного рахунку, схожа на інфраструктуру PBS (розділення пропонента-будівельника) для MEV (максимально видобувної вартості). Таким чином, користувачі, які прагнуть отримати переваги розумних рахунків, можуть просто використовувати трубопровід ERC-4337 для переозначення логіки свого рахунку та правил валідності транзакцій у структурах, які називаються UserOperation (або UserOps у скороченому вигляді).
ERC 4337 принесе переваги розумних рахунків в сучасному Ethereum, не втілюючи в себе ніякої складності, функціонуючи як позапротокольна альтернатива утвердженим розумним рахункам. Однак це не означає, що інфраструктура оптимальна в поточному стані, оскільки її власна складність все ще є значним пунктом вразливості.
Щоб вирішити цю складність,RIP 7560було розроблено як утверджена версія інфраструктури ERC 4337 в Ethereum та його L2, щоб вона успадковувала схеми сопротиві деяким мережам замість того, щоб визначати новий набір правил (як це робить ERC 4337 з ERC 7562.
У цьому звіті ми зосередимося на вивченні програмованості EOA, оцінюючи різні EIP, які описують рішення в цьому напрямку, і обговорюємо їх переваги та недоліки. У частинах 2 і 3 цієї серії ми розглянемо два класи інших підходів до абстракції облікового запису, які досліджуються в Ethereum.
Для того, щоб знайти, що може бути абстраговано, нам потрібна (дещо) повна картина поточного дизайну рахунків. Цей розділ в основному слугуватиме своєрідним переглядом того, що насправді є рахунками в Ethereum і як їх транзакції перевіряються та виконуються.
Рахунки Ethereum - це сутності з балансом ефіру (ETH) і здатністю надсилати транзакції в блокчейн Ethereum. Вони представлені у вигляді 42-значного шістнадцяткового «адреси», яке служить унікальним вказівником на рахунок та транзакції рахунку.
Адреса діє як ключ до стану триєвого ланцюжка. Листові вузли цього триє є структурами даних рахунків, які можна розкласти на чотири поля:
Зміст цих чотирьох полів використовується для визначення типу рахунку і, в кінцевому рахунку, визначає масштаб його функціональності. Таким чином, два типи рахунків Ethereum:
EOA мають порожні поля codeHash та storageHash і можуть бути контрольовані лише тими, хто володіє приватними ключами. Їх адреси можна отримати з відповідного відкритого ключа, дописавши "0x" до останніх двадцяти символів хешу keccak-256 відкритого ключа рахунку.
їхні транзакції повністю базуються на витягуванні та підґрунті на логіці їх розгорнутого коду.
Оскільки ці облікові записи можуть контролюватися лише їх вмістом коду, вони не потребують приватного ключа і мають лише публічний ключ. Таким чином, будь-який агент, який має здатність оновлювати / змінювати вміст коду контракту, зможе отримати доступ до його балансу.
Адресу CA отримують з адреси його створювача та його nonce до моменту розгортання контракту.
Транзакції
Нещодавно ми описали рахунки як сутності, що мають здатність надсилати транзакції через Ethereum. Таким чином, ми можемо розуміти, що основною метою рахунку є надсилання та отримання транзакцій, тоді як блокчейн виступає як реєстр, що записує історію транзакцій, а також описує, як транзакції змінюють поля рахунків на основі правил, описаних в специфікації протоколу блокчейну.
Так що це за "транзакції"?
Транзакції - це операції, що надсилаються з рахунку і призводять до зміни "стану" мережі. Вони є криптографічно підписаними інструкціями від рахунків, що при виконанні призводять до оновлення стану на всій мережі.
Відсутність дозволу супроводжується вартістю неправильних стимулів, для вирішення цього необхідно встановити жорсткі вимоги (або правила валідності) для взаємодії в таких середовищах.
У цьому контексті транзакції повинні дотримуватися певних правил дійсності, щоб вважатися дійсними та виконуватися. Більшість цих правил дійсності реалізовані за допомогою обмежень, накладених на рахунок, що відправляє транзакцію, і залежать від типу цього рахунку.
На Ethereum ЕОА оптимізовані для зручності використання, оскільки вони призначені для кінцевих користувачів. Вони можуть надсилати транзакції в певному порядку та працювати автономно. Їх також можна створити локально, найбільш поширений метод - використання постачальників гаманців, таких як MetaMask, Rainbow, Rabby тощо.
З іншого боку, контрактні рахунки можуть надсилати лише транзакції, дозволені їх логікою, у відповідь на їх виклик. Крім того, їх може створити лише EOA, який має достатній баланс для оплати зберігання свого стану.
Більш високорівневим описом буде те, що ЕОА може мати лише баланс, тоді як КО може мати як баланс, так і логіку, яка визначає, як цей баланс може бути витрачений.
Ці властивості залежать від наступних логічних параметрів, які визначають правила, яким повинні відповідати транзакції рахунку:
Ці параметри призначені для жорсткості для зовнішньо контрольованих облікових записів (EOA):
Загалом, логіка виконання ЗВТ обмежує їх до одної транзакції на дійсний підпис.
З іншого боку, CAs мають більшу гнучкість у цих параметрах:
У більшості практичних випадків логіка, що використовується в цьому випадку, є схемою багато-підписового підпису, яка передбачає, що для того, щоб зміна логіки ЦЗ була дійсною, потрібно M з N дійсних підписів (де M < N) від певних рахунків (зазвичай ЕОА),.
Оцінюючи ці функції, ми спостерігаємо, що кожен тип рахунку розроблений таким чином, щоб мати компроміс між автономією та програмованістю.
EOA мають повну автономію, але обмежену програмованість; вони можуть авторизувати та відправляти транзакції в будь-який час, але ці транзакції повинні відповідати жорсткому формату, щоб вважатися дійсними. CA мають повну програмованість (лише обмежена конструкцією EVM), але обмежену автономію; їхні транзакції не обов'язково повинні відповідати жодному жорсткому формату, але можуть бути відправлені тільки через виклик їхньої логіки.
У наступному підрозділі ми зараз вивчимо наслідки цих виборів дизайну, щоб повністю зрозуміти пропозицію кожного обговореного EIP протягом цієї серії.
Тепер, коли у нас є дещо лаконічний знання функціональності різних облікових записів, ми легко можемо ідентифікувати їх привабливість, а також проблеми, які вони створюють як для користувачів, так і для розробників на Ethereum.
Як ми вже згадували раніше, EOA розроблені як першокласні облікові записи, орієнтовані на кінцевих користувачів. Додатки розроблені таким чином, щоб легко взаємодіяти з ними, вони майже не складні, і, звичайно, їх створення не вимагає витрат. Однак його простота супроводжується значною втратою новизни, оскільки вони розроблені таким чином, щоб бути строго детермінованими.
Деякі з проблем щодо них:
Не всі хочуть (або можуть) завжди утримувати ETH (я маю на увазі подивіться на ту цінову динаміку), тому раціональними рішеннями було б дозволити використання кількох газових валют (занадто складно, порушує занадто багато невід'ємних умов, як описано в розділі "Валюта").тут), або щоб дозволити вирішення платежів за газ за допомогою іншого рахунку, який не є походженням транзакції.
Наприкінці спектру рахунку CAs націлені на розробників та більш технічну аудиторію користувачів. Вони служать як засоби для розумних контрактів (тобто ми вважаємо розумними контрактами їх вміст логіки або коду) і тому можуть реалізувати нові формати транзакцій, що забезпечуються EVM.
Проте, для всіх цих функцій вони є прославленими обліковими записами другого класу, оскільки вони не мають автономії. Деякі з їх недоліків такі:
Оглянувши дизайнерські вибори, які призвели до проблем, визначених у цьому підрозділі, ми тепер можемо перейти до оцінки запропонованих рішень.
Концепція абстрагування рахунку (принаймні через розумні рахунки) завжди була невід'ємною частиною дорожньої карти Ethereum. Легенда говорить, що складність, пов'язана з її реалізацією, загрожувала подальшому затриманню запуску Ethereum, тому була відкинута на поточний дизайн з різними рахунками, що пропонують різні функціональні можливості. Вона знову затрималася через фокус Ethereum на The Merge, і тепер знову з'являється як головна частина наступного великого оновлення мережі - Pectra. Однак її складність все ще вважається значним недоліком, що заважає її увіковічненню, особливо з урахуванням того факту, що Ethereum переключився на розкрут-центричну дорожню карту.
Вимоги тепер двохкрокові:
Інтуїтивно ця концепція відіграє більшу роль у контексті ланцюгової абстракції та інтероперабельності, однак наша сфера застосування в цьому звіті обмежена технічними ініціативами, вжитими для досягнення самої абстракції облікового запису.
Абстрагування рахунку має на меті поєднати кращі риси EOAs та CAs в новий стандарт рахунку - розумні рахунки, які дозволяють повне або часткове розділення правил дійсності будь-якого рахунку на логіку перевірки та виконання; так що рахунки можуть визначати свої власні правила дійсності - за дозволом EVM - так само, як рахунки контрактів, залишаючись при цьому повністю автономними, як зовнішньо-власні рахунки.
Часто виникає плутанина навколо відмінностей між розумними рахунками та гаманцями для розумних контрактів, тому дозвольте явно описати ці відмінності нижче:
Комерціалізація гаманців з розумними контрактами полегшила прийняття CAs більш широким ринком, дозволяючи менш технічним користувачам скористатися їх функціями. Однак вони все ще зіткнуться з пастками, пов'язаними з CAs.
Повернемося до розмови; Раніше ми вже розглядали параметри, які використовуються для визначення правил валідності операцій з рахунками:
Значення перших чотирьох параметрів можуть колективно називатися логікою підтвердження рахунку, які є перевірками, які відбуваються перед початком виконання транзакції.
Останній параметр визначає, як повинен виконуватися транзакція.
У вступі ми надали загальний огляд поточного ландшафту AA у вигляді певного виду класифікації для різних запропонованих рішень. Тепер ми зосередимося на першому класі рішень проблеми рахунку Ethereum - програмованості EOA.
Найбільша привабливість Ethereum полягає в його молодій, але живій екосистемі DeFi, яка включає в себе різноманітні децентралізовані додатки, які є його основними ліквідними стоками. Більшість цих DApps оптимізовані для обслуговування EOAs, тому їх важко інтегрувати з CAs та, в кінцевому підсумку, зі смарт-рахунками. Хоча смарт-контрактні гаманці справді допомагають CAs у цьому випадку, вони мають свої власні обмеження та зовсім інший UX.
Тимчасове рішення, яке досліджується, поки як DApps, так і постачальники гаманців звикають до розумного стандарту рахунку, полягає в наданні тимчасових покращень до ЗЕР, які дозволяють їм подолати більшість їх накладених обмежень, будь то їх перевірка або логіка виконання.
Нижче ми розглянемо технічні характеристики трьох основних EIP, які надають можливості для програмованості EOA; від менш відомого EIP 5806до амбіційногоEIP 3074а в кінці кінців до переможцяEIP 7702.
Ця пропозиція спрямовується на надання більшої функціональності стандарту EOA, дозволяючи йому виконувати делеговані виклики до логіки рахунку контракту (його смарт-контракт). Це фактично призводить до виконання смарт-контракту в контексті EOA викликача, тобто EOA залишається під контролем своєї логіки перевірки, тоді як логіка виконання обробляється відповідною логікою CA.
Перш ніж ми продовжимо далі, давайте здійснимо поїздку по пам'яті розвитку Ethereum доEIP-7.
EIP-7 запропонував створення опкоду 0xf4/DELEgateCALL, який використовується для відправлення повідомлень у першинний рахунок з логікою вторинного рахунку, зберігаючи значення полів [sender] та [value] першинного рахунку.
Іншими словами, основний рахунок «успадковує» (або позичає, якщо ви бажаєте) логіку вторинного рахунку на певний термін, як вказано в виклику повідомлення, щоб логіка останнього виконувалася в контексті першого.
Ця операційний код дозволяв розробникам додатків розділяти логіку своєї програми на кілька смарт-контрактів, забезпечуючи взаємозалежність, щоб вони могли легко обійти обмеження розміру коду та обмеження газу.
Добре, тому які делеговані виклики дозволяють залежність СА? Ну, EIP-5806 використовує EIP-7 як натхнення для запропонування розширення функціональності делегованого виклику для ЕОА, тобто дозволяємо також ЕОА бути залежними від СА, тому що ні.
EIP 5806 introduces a new Сумісний з EIP-2718тип транзакції, який упакований наступним чином:
rlp([chainID, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, data, access_list, signature_y_parity, signature_r, signature_s]).
Ці транзакції розроблені так, щоб поле [to] - яке представляє адресу одержувача - може приймати лише адреси як 20-байтові вхідні дані, що вимикає відправника від використання опкоду CREATE.
Мотивація кожного компонента схеми РЛП полягає в наступному:
Хоча упаковка транзакцій EIP-5806 в конверти EIP-2718 дозволяє їм бути дуже зворотно сумісними, зовнішні облікові записи (EOAs) не еквівалентні CA. Тому деякі обмеження повинні бути визначені щодо того, як EOA використовує делеговані виклики, щоб запобігти порушенню незмінності.
Ці обмеження спрямовані на наступні опкоди:
Основна застосовність EIP 5806 - це абстрагування виконання для EOAs. Дозволяючи EOAs взаємодіяти надійно з розумними контрактами поза простими викликами до їхньої логіки, це надає їм функції, такі як:
Зміни, запропоновані EIP-5806, хоча й дозволяють необхідні функції, не є особливо новаторськими; її існування в основному засноване на вже функціональному EIP-7. Це дозволяє йому обійти багато потенційних перешкод для прийняття.
Одним з основних побоювань, висловлених на самому початку його існування, був потенційний ризик надання EOA доступу до сховища та можливості змінювати його, так само, як це роблять CAs. Це порушує багато мережевих невід'ємних властивостей, що стосуються того, як EOAs повинні здійснювати транзакції, тому це було вирішено шляхом введення обмежень, згаданих у попередньому підрозділі.
Друге зауваження (яке є палицею з двома кінцями) – це простота EIP-5806; є певна думка, що винагорода за прийняття EIP-5806 може бути не варта витрат, оскільки це дозволяє лише абстракцію виконання, а не багато іншого. Будь-яке інше обмеження валідності залишається визначеним мережею для EOA, які погоджуються на EIP-5806, на відміну від інших дещо схожих EIP, які ми обговорюємо в наступних підрозділах.
EIP-3074 пропонує дозволити зовнішнім обліковим записам делегувати більшу частину логіки перевірки їхніх спеціалізованим контрактним рахункам, які називаються викликачами, шляхом накладання логіки авторизації останніх на них для конкретних форм транзакцій.
Воно досягає цього, передаючи свою політику доступу на викликаючий контракт, який потім відповідає за визначення політики доступу до EOA.
Цей EIP пропонує додати до EVM два нових опкоди:
Ці два опкоди дозволяють EOA делегувати контроль за попередньо встановленою CA та виступати як один через неї, не розгортаючи контракт і не несучи пов'язані з цим витрати та зовнішності.
EIP-3074 дозволяє транзакціям використовувати формат підпису [MAGIC], щоб запобігти зіткненню з іншими форматами підпису транзакцій. Активний рахунок, до якого передаються інструкції [AUTHCALL], визначається як поле контекстної змінної з іменем [authorized], яке зберігається лише протягом однієї транзакції і мусить бути визначене заново для кожного нового [AUTHCALL].
Перед тим, як займатися складнощами кожного опкоду, це сутності, що беруть участь у транзакції EIP-3074:
Контракти Invoker отримують повідомлення [AUTH] зі значенням [COMMIT] від [authority]; це значення визначає обмеження, які обліковий запис бажає накласти на виконання [authorized] інструкцій [AUTHCALL].
Таким чином, інвокери відповідають за забезпечення того, що [contract_code], визначений у [authorized] рахунку, не є шкідливим і має здатність задовольнити невід'ємність, встановлену головним підписаним рахунком в [COMMIT] значенні.
Опкод [AUTH] має три вхідні елементи стеку; або, ще простіше, він визначається трьома входами, які обчислюють один вихід. Ці вхідні дані:
Останні два входи використовуються для опису діапазону змінної пам'яті від 0 до 97, де:
Змінні [yParity], [r] та [s] інтерпретуються колективно як підпис ECDSA, [magic], на кривій secp256k1 над повідомленням:
[keccak256 (MAGIC || chainID || nonce || invoker address || COMMIT)]
де:
Якщо обчислений підпис дійсний, а адреса підписувача дорівнює [повноваження], поле [authorized] оновлюється до значення, наданого [authority]. Якщо будь-яка з цих вимог не виконується, поле [authorized] залишається незмінним у попередньому стані або як незадане значення.
Вартість газу для цієї опкоди обчислюється як сума:
[AUTH] реалізовано так, щоб не змінювати пам'ять, і бере значення [authority] як аргумент, щоб було легко перевірити його значення з наданою підписом.
Операція [AUTHCALL] має сім вхідних елементів стеку, які використовуються для обчислення одного вихідного елемента стеку.
Він має ту саму логіку, що й код операції [CALL], тобто; Він використовується для відправки повідомлень-дзвінків в обліковий запис і запуску певної логіки в його контрактах. Єдине відхилення в їхній логіці полягає в тому, що [AUTHCALL] призначений для встановлення значення [CALLER], перш ніж приступити до виконання.
Отже, [AUTHCALL] використовується [authority], щоб спричинити контекст-залежну поведінку в [authorized] з логічними перевірками, які відбуваються наступним чином:
Вартість газу для [AUTHCALL] обчислюється як сума:
Доступ до даних, що повертаються з [AUTHCALL], здійснюється через:
Щоб все це зібрати разом з набагато меншою кількістю технічних термінів; транзакції Ethereum зазвичай вказують два значення:
У ЗРР, як вже зазначалося, авторизація тісно пов'язана з виконанням, тобто (tx.origin == msg.sender). Цей простий незмінний дає поштовх більшості проблем, які ми пояснили в підрозділі «Рахунки та валідність транзакцій» цього звіту.
Повідомлення [AUTH] від [authority] дозволяє змінювати функцію tx.origin на [authorized], залишаючись при цьому msg.sender. Крім того, воно дозволяє встановлювати обмеження цього привілею з використанням значення [COMMIT].
[AUTHCALL] потім дозволяє [authorized] отримати доступ до логіки контракту, використовуючи [invoker] як посередника, щоб забезпечити, що контракт, до якого він хоче отримати доступ, є безпечним. Тобто для кожного [AUTHCALL] [authorized] повинен вказати певний [invoker] для їхнього [COMMIT].
EIP 3074 в основному відповідає за те, що дозволяє ЕОА делегувати свою логіку авторизації іншому рахунку, проте його відкрите виконання дозволяє здійснювати набагато більше в різних контекстах.
Весь логіка перевірки EOA може бути абстрагована шляхом застосування різних обмежень/інновацій до викликача за потреби, деякі з можливих конструкцій, засновані на їх цільовій логіці, включають:
Крім того, логіка виконання інтуїтивно абстрагована; нарешті, ініціатор (який є CA) тепер відповідає за виконання запитів на транзакції від імені EOA.
Цитуючиодин з авторів: «Я не очікував би, що гаманці надають функціональність для підписування довільних викликачів ...». Можливо, найбільша проблема, яку ставить ініціатива 3074, полягає в тому, що інновації на його основі дуже легко нахиляться до дозволених та власних потоків угод; так само, як поточні ітерації ринків MEV та PBS Ethereum.
За замовчуванням контракти викликувача потребують великої перевірки, щоб запобігти ще гіршим атакам, ніж це можливо зараз. Це неодмінно призведе до екосистеми, де лише кілька контрактів викликувача, розроблених впливовими особами, будуть прийняті як типові для розробників гаманців. Таким чином, це сводиться до компромісу між вибором важкого децентралізованого шляху постійної перевірки та підтримки контрактів викликувача на ризик безпеки користувачів; або просто прийняття контрактів викликувача від встановлених та поважних джерел з кращими гарантіями безпеки для користувачів та меншим наглядом за безпечністю контракту.
Ще один аспект цієї точки - це функція вартості, пов'язана з проектуванням, аудитом та маркетингом функціонального та безпечного інвокера. Менші команди майже завжди будуть перевершені більшими організаціями, особливо в маркетинговій сфері, які вже мають певну встановлену репутацію, навіть якщо їх продукт кращий.
EIP-3074 закріплює схему підпису ECDSA, оскільки вона все ще вважається більш дійсною, ніж схема авторизації, введена через invoker. Хоча є аргументи, що квантова стійкість на даний момент не є визначальною проблемою, і що в майбутньому, коли ECDSA може бути скомпрометованим, буде набагато гірше; неофіційною метою Ethereum є завжди бути попереду таких проблем. Ймовірне, що відмова від квантової і цензурної стійкості на користь маргінальних поліпшень UX може не бути найкращим вибором у найближчому майбутньому.
Ще одна точка у сприятливому аргументі - це те, що поки переваги 3074 ще оцінюються, ERC-4337 (який не потребує жодних змін протоколу) вже має великий ринок, тому ви також повинні бути сумісні з ним, щоб уникнути компартментації екосистеми.
Навіть з дорожньою картою нативної абстракції рахунку, опкоди [AUTH] та [AUTHCALL] з часом стануть застарілими в EVM, що призведе до значного технічного боргу Ethereum, аби досягти незначного покращення UX.
Після відправки повідомлення [AUTH] і делегування контролю, очікується, що EOA уникне звичайної схеми авторизації за допомогою закритого ключа, оскільки відправка «звичайної» транзакції призводить до анулювання дозволу, який вона делегувала кожному викликачу.
Отже, схема ECDSA залишається суворо кращою за будь-яку іншу схему авторизації, яку можуть дозволити пов'язані контракти, що означає, що втрата приватних ключів призведе до повної втрати активів рахунку.
Ця пропозиція спочатку була висунута як дещо мінімалістична варіація EIP 3074, і буланавіть мали на увазібути оновленням до цього. Він був створений, щоб вирішити якісь неефективності EIP 3074, особливо щодо питань навколо його несумісності з вже процвітаючою екосистемою 4337 та пропозицією про абстрагування рахунку – RIP 7560.
Його підхід полягає в додаванні нового типу транзакції, сумісного з EIP 2718 - [SET_CODE_TX_TYPE] - який дозволяє EOA вести себе як розумний рахунок для визначених транзакцій.
Цей дизайн дозволяє використовувати ті ж функції, що й EIP 5806, і ще кілька, зберігаючи сумісність з дорожньою картою абстракції рахунку та існуючими ініціативами.
EIP-7702 дозволяє ЕОА «імпортувати» вміст коду контракту через транзакцію, сумісну з 2718 [SET_CODE_TX_TYPE] форматом:
rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, value, data, access_list, authorization_list, signature_y_parity, signature_r, signature_s])
Цей навантаження цілком схожий на той з EIP 5806, за винятком того, що він вводить "список авторизації". Цей список - це впорядкована послідовність значень формату:
[[chain_id, address, nonce, y_parity, r, s], …]
де кожна кортеж визначає значення [адреси].
Перед продовженням сторони, що беруть участь у SET_CODE_TX_TYPE, є:
Коли [authority] підписує SET_CODE_TX_TYPE, вказуючи [address], створюється делегатний покажчик. Це є «програма-вказівник», яка призводить до того, що всі запити на отримання коду, спричинені діями [authority] у будь-який момент, будуть направлені на спостережний код [address].
Для кожної кортежної [chain_id, address, nonce, y_parity, r, s], логічний потік транзакції типу 7702 виглядає наступним чином:
Фух! Щоб пов'язати все назад; цей EIP дозволяє EOAs надсилати транзакції, які встановлюють вказівник на код контракту, що дозволяє їм реалізувати цю логіку в подальших транзакціях. Таким чином, він строго сильніший, ніж EIP 5806, оскільки дозволяє EOAs фактично мати вміст коду стільки часу, скільки вони хочуть (на відміну від EIP 5806, який просто дозволяє EOAs відсилати делеговані виклики).
Хоча можна стверджувати, що це вже не абстракція, оскільки EOA активно приймає логіку, яку вона бажає виконати, вона все ще не є «первинним власником» цієї логіки. Крім того, вона не містить безпосередньої логіки, вона просто вказує на вказівник до логіки (щоб зменшити обчислювальну складність). Тому ми йдемо з абстракцією виконання!
Хоча інваріант require(msg.sender == tx.origin) порушений для дозволу самоспонсорства, EIP все ще дозволяє інтеграцію підтримуваних пересилань транзакцій. Однак, застереження полягає в тому, що таким пересилальникам потрібна система, заснована на репутації або стейкі, щоб запобігти атакам на грифінг.
ЕОА можуть вказувати лише на певну частину коду рахунку, щоб тільки логіка цієї частини була виконувана в їх контексті.
Це також дозволяє існування підключень, які дозволяють "зниження привілеїв", так що конкретні dAPPs мають доступ лише до балансу рахунку за певних умов. Наприклад, можна уявити дозвіл на витрату токенів ERC-20, але не ETH, або на витрату до 1% від загального балансу на день, або лише на взаємодію з певними додатками.
Через свою невибіркову природу транзакція EIP-7702 може дозволити користувачеві отримати доступ до опкоду CREATE2 та використовувати його для розгортання байткоду на адресу без будь-яких інших обмежувальних параметрів, таких як логіка ринку комісій (наприклад, EIP-1559 та EIP-4844). Це дозволяє відновлювати адресу та використовувати її на різних станових машинах з однаковим байткодом, де її рахунок на кожному ланцюжку відповідає за визначення інших контекстних змінних параметрів.
Хоча EIP-7702 ще досить недавній, вже було здійснено багато прототипування та тестування його залежностей та потенційних недоліків, але його мінімалістична модель гарантує йому багато гнучкості та, отже, корисності в різних контекстах. Однак він порушує занадто багато невід’ємних умовностей і не є безпосередньо сумісним з попередніми версіями.
Деякі з його логіки включають:
Більшість користувачів не мають розуміння дійсного вмісту рахунку (або навіть різниці між рахунком та адресою!), тому дозволити колізії адрес означає, що EOA може виступати як CA та приваблювати кошти користувачів у довготривалій боротьбі, щоб в кінці кінців вкрасти все. EIP-3607 вирішує це, вимагаючи, щоб рахунки, які містять код, не могли витрачати свій баланс, використовуючи свою власну логіку авторизації. Однак EIP 7702 порушує цей інваріант, щоб дозволити EOAs залишатися автономними навіть після отримання певної рівня програмованості.
Підписування адреси облікового запису замість його вмісту коду, по суті, схоже на схему 3074 з викликачами. Воно не забезпечує строгих гарантій щодо однорідності вмісту коду між ланцюжками, оскільки адреса може мати різний вміст коду на різних ланцюжках. Це означає, що адреса, вміст коду якої містить ту саму логіку на одному ланцюжку, може бути хижою або відкрито шкідливою на іншому ланцюжку, що може призвести до втрати коштів користувача.
EOA в їх поточній формі сьогодні суттєво обмежені, оскільки вони не дозволяють користувачам скористатися можливостями програмованості, що пропонуються EVM. Хоча існують різні шляхи оновлення облікових записів, як ми вказали на початку цього звіту, обране рішення повинно дотримуватися принципів безпечного та надійного самостійного зберігання. Крім того, оновлення EOA може значно вплинути як на користувацький досвід, так і на розробників додатків, тому всі голоси заінтересованих сторін повинні бути враховані.
Дозволяючи ЕОА виконувати код будь-яким чином надзвичайно розширює функціональність рахунків, проте ця нова виразність іде разом зі значущими ризиками та можливими сліпими зонами. Вирішення цих компромісів є критичним для забезпечення оновлення з неперевершеними користувацькими перевагами для користувачів Ethereum.
Культура відкритої дискусії в Ethereum робить його великим майданчиком для таких інновацій, оскільки майже кожна імплікація кожного дизайну ретельно розбирається предметними експертами. Це комплексне розглядання повинно допомогти зменшити ризики злочинної поведінки з боку супротивників.
EIP-7702 наразі є обличчям рекламної кампанії для механізмів, які прагнуть надати можливість програмування EVM для EOAs, оскільки його було визначено як заміну слоту EIP 3074 в оновленні Pectra. Він успадковує відкритий дизайн механізму 3074, значно зменшуючи площу атаки / ризики. Він також дозволяє значно більше, уникнувши обмежень 3074 для певних класів опкодів.
Хоча деякі вдосконалення ще виконуються в дизайні пропозиції, вона вже зібрала багато доброзичливості та підтримки від розробників, особливо оскільки сам Віталік підтримує її безпосередньо.
У спільноті є твердження, що такий підхід до абстрагування рахунку може бути навіть кращим, ніж розумні рахунки. Цей коментар підкреслює, що цей шлях потребує менше змін і не є таким складним, і що ЕОА вже закріплені. Однак, ми повинні пам'ятати про майбутній віхідний пункт щодо квантової стійкості на кожному рівні мережі Ethereum. Ця квантова безпека неможлива з поточною основною моделлю рахунку через використання схем авторизації EOA на основі ECDSA.
Отже, програмованість EOA слід розглядати як крок по шляху до розумних рахунків, а не як пункт призначення. Вона підсилює EOA та забезпечує кращий досвід користувача та розробника, залишаючись сумісною з остаточною метою абстракції рахунку розумних рахунків.
У нашому наступному звіті ми спробуємо дослідити схеми міграції EOA, щоб побачити, наскільки вони підходять для дорожньої карти абстрагування рахунку, слідкуйте за оновленнями!