Особлива подяка Дену Фінлею, Карлу Флоершу, Девіду Хоффману та командам Scroll і SoulWallet за відгуки, рецензії та пропозиції.
По мірі того, як Ethereum переходить від молодої експериментальної технології до зрілого технологічного стеку, здатного забезпечити відкритий, глобальний і бездозвільний досвід для пересічних користувачів, є три основні технічні зміни, які стек повинен пройти приблизно одночасно:
Трикутник переходу екосистеми. Ви можете вибрати лише 3 з 3.
Без першого Ethereum зазнає невдачі, оскільки кожна транзакція коштує $3,75 ($82,48, якщо у нас буде ще один бичачий ривок), а кожен продукт, націлений на масовий ринок, неминуче забуває про ланцюжок і приймає централізовані обхідні шляхи для всього.
Без другої Ethereum зазнає невдачі, оскільки користувачам незручно зберігати свої кошти (і нефінансові активи), і всі переходять на централізовані біржі.
Без третього, Ethereum зазнає невдачі, тому що наявність всіх транзакцій (і POAP, і т.д.) у відкритому доступі для буквально кожного - це занадто велика жертва конфіденційності для багатьох користувачів, і всі переходять на централізовані рішення, які хоча б трохи приховують ваші дані.
Ці три переходи мають вирішальне значення з наведених вище причин. Але вони також є складними через необхідність інтенсивної координації для їх належного вирішення. Потребують поліпшення не тільки функції протоколу; в деяких випадках спосіб взаємодії з Ethereum повинен змінитися досить фундаментально, що вимагає глибоких змін з боку додатків і гаманців.
У світі масштабування L2 користувачі будуть існувати на багатьох L2. Чи є ви членом ExampleDAO, яка живе на Оптимізмі? Тоді у вас є акаунт на Оптимізмі! Ви тримаєте CDP в системі стейблкоінів на ZkSync? Тоді у вас є обліковий запис на ZkSync! Ви колись пробували якийсь додаток, який випадково опинився на Какароті? Тоді у вас є акаунт на Kakarot! Часи, коли користувач мав лише одну адресу, минули.
У мене є ETH в чотирьох місцях, якщо вірити моєму гаманцю Brave Wallet. І так, Arbitrum та Arbitrum Nova відрізняються. Не хвилюйтеся, з часом все стане ще більш заплутаним!
Гаманці смарт-контрактів додають ще більшої складності, оскільки набагато складніше мати одну і ту ж адресу на L1 і різних L2. Сьогодні більшість користувачів використовують зовнішні акаунти, адреса яких є буквально хешем відкритого ключа, який використовується для перевірки підписів - тому між L1 і L2 нічого не змінюється. Однак з гаманцями смарт-контрактів зберігати одну адресу стає складніше. Хоча було зроблено багато роботи, щоб зробити адреси хешами коду, які можуть бути еквівалентними в різних мережах, зокрема CREATE2 і фабрика синглетонів ERC-2470, важко зробити так, щоб це працювало бездоганно. Деякі L2 (напр. "ZK-EVMsтипу 4 ") не зовсім еквівалентні EVM, часто замість них використовується Solidity або проміжна збірка, що перешкоджає хеш-еквівалентності. І навіть коли ви можете мати хеш-еквівалентність, можливість зміни власника гаманця через зміну ключа створює інші неінтуїтивні наслідки.
Конфіденційність вимагає, щоб кожен користувач мав ще більше адрес, і може навіть змінювати, з якими саме адресами ми маємо справу. Якщо пропозиції стелс-адрес ста нуть широко використовуваними, замість того, щоб кожен користувач мав лише кілька адрес або одну адресу на L2, користувачі можуть мати одну адресу на одну транзакцію. Інші схеми конфіденційності, навіть вже існуючі, такі як Tornado Cash, змінюють спосіб зберігання активів по-іншому: кошти багатьох користувачів зберігаються в одному смарт-контракті (а отже, за однією адресою). Щоб надіслати кошти конкретному користувачеві, користувачі повинні покладатися на власну внутрішню систему адресації схеми конфіденційності.
Як ми бачили, кожен з трьох переходів по-різному послаблює ментальну модель "один користувач ~= одна адреса", і деякі з цих ефектів впливають на складність виконання переходів. Дві особливі складності полягають у наступному:
У мене є монети на Scroll, і я хочу заплатити за каву (якщо "я" - це буквально я, автор цієї статті, то "кава" - це, звісно, метонімія до "зеленого чаю"). Ви продаєте мені каву, але налаштовані лише на отримання монет на Тайко. Що робити?
В основному є два рішення:
Звичайно, ці рішення можна комбінувати: одержувач надає список L2, які він готовий прийняти, а гаманець відправника розраховує оплату, яка може включати або прямий переказ, якщо йому пощастить, або перехресний L2-переказ.
Але це лише один з прикладів ключової проблеми, яку створюють ці три переходи: такі прості дії, як сплата комусь, починають вимагати набагато більше інформації, ніж просто 20-байтна адреса.
Перехід на гаманці смарт-контрактів, на щастя, не є великим навантаженням на систему адресації, але в інших частинах стека додатків все ще існують деякі технічні проблеми, які необхідно вирішити. Гаманці потрібно буде оновити, щоб переконатися, що вони не відправляють тільки 21000 gas разом з транзакцією, і ще важливіше буде переконатися, що сторона, яка отримує платіж, відстежує не тільки перекази ETH з EOA, але і ETH, відправлені за допомогою коду смарт-контракту. Додатки, які покладаються на припущення, що власник адреси є незмінним (наприклад NFT, які забороняють смарт-контракти для стягнення роялті) доведеться шукати інші способи досягнення своїх цілей. Гаманці смарт-контрактів також спростять деякі речі - зокрема, якщо хтось отримає лише токен ERC20, який не є ETH, він зможе використовувати пей-майстри ERC-4337 для оплати за газ цим токеном.
З іншого боку, приватність знову ставить серйозні виклики, з якими ми ще не впоралися. Початкова версія Tornado Cash не створювала жодних проблем, оскільки не підтримувала внутрішні перекази: користувачі могли лише вносити кошти в систему та виводити їх з неї. Однак після того, як ви зможете здійснювати внутрішні перекази, користувачам потрібно буде використовувати внутрішню схему адресації системи конфіденційності. На практиці, "платіжна інформація" користувача повинна містити (i) певний "публічний ключ", тобто зобов'язання зберігати таємницю, яку одержувач може використовувати для здійснення витрат, і (ii) спосіб відправника надсилати зашифровану інформацію, яку може розшифрувати лише одержувач, щоб допомогти одержувачу виявити платіж.
Протоколи стелс-адрес покладаються на концепцію мета-адрес, які працюють наступним чином: одна частина мета-адреси є прихованою версією ключа витрат відправника, а інша частина - ключем шифрування відправника (хоча мінімальна реалізація може встановити ці два ключі однаковими).
Схематичний огляд абстрактної схеми стелс-адреси, заснованої на шифруванні та ZK-SNARK'ах.
Ключовий урок тут полягає в тому, що в екосистемі, дружній до приватності, користувач матиме як публічні ключі витрат, так і публічні ключі шифрування, а "платіжна інформація" користувача повинна містити обидва ключі. Є й інші вагомі причини, окрім платежів, щоб розширюватися в цьому напрямку. Наприклад, якщо ми хочемо отримати зашифровану електронну пошту на основі Ethereum, користувачам потрібно буде публічно надати якийсь ключ шифрування. У "світі EOA" ми могли б повторно використовувати для цього ключі від облікових записів, але у світі безпечних смарт-гаманців з контрактами нам, ймовірно, слід мати для цього більш чіткий функціонал. Це також допоможе зробити ідентифікацію на основі Ethereum більш сумісною з децентралізованими екосистемами конфіденційності, що не належать до Ethereum, зокрема, з ключами PGP.
Стандартний спосіб впровадження ключових змін та соціального відновлення у світі з багатьма адресами на користувача полягає в тому, що користувачі просто запускають процедуру відновлення на кожній адресі окремо. Це можна зробити в один клік: гаманець може містити програмне забезпечення для виконання процедури відновлення за всіма адресами користувача одночасно. Однак навіть з такими спрощеннями UX наївне багатоадресне відновлення має три проблеми:
Вирішити ці проблеми складно. На щастя, існує дещо елегантне рішення, яке працює досить добре: архітектура, яка розділяє логіку верифікації та зберігання активів.
Кожен користувач має контракт зі сховищем ключів, яке існує в одному місці (це може бути як основна мережа, так і певний L2). Таким чином, користувачі мають адреси на різних L2, де логіка перевірки кожної з цих адрес є вказівником на контракт зі сховищем ключів. Витрати з цих адрес вимагатимуть підтвердження, яке буде включено до контракту на зберігання ключів і показуватиме поточні (або, що більш реалістично, зовсім нещодавні) витрати відкритого ключа.
Доведення може бути реалізовано кількома способами:
Якщо ми хочемо уникнути створення одного підтвердження на кожну транзакцію, ми можемо реалізувати більш легку схему, яка вимагає лише крос-L2 підтвердження для відновлення. Витрати з облікового запису залежатимуть від витратного ключа, відповідний публічний ключ якого зберігається в цьому обліковому записі, але для його відновлення потрібна транзакція, яка копіює поточний витратний_публічний ключ у сховищі ключів. Кошти на контрфактичних адресах безпечні, навіть якщо ваші старі ключі не є безпечними: "активація" контрфактичної адреси, щоб перетворити її на робочий контракт, вимагатиме створення перехресного L2-доказу для копіювання поверх поточного spending_pubkey. У цій темі на форумі Safe описано, як може працювати подібна архітектура.
Щоб додати приватності такій схемі, ми просто шифруємо вказівник, а всі доведення виконуємо всередині ZK-SNARKs:
З більшою кількістю роботи (напр. використовуючи <a href="https://notes.ethereum.org/@vbuterin/non_index_revealing_proof"> this роботу як відправну точку), ми також могли б прибрати більшу частину складності ZK-SNARK і створити більш просту схему на основі KZG.
Ці схеми можуть ускладнюватися. З іншого боку, між ними існує багато потенційних синергій. Наприклад, концепція "контрактів на зберігання ключів" також може бути рішенням проблеми "адрес", згаданої в попередньому розділі: якщо ми хочемо, щоб користувачі мали постійні адреси, які не змінюються кожного разу, коли користувач оновлює ключ, ми можемо внести стелс-мета-адреси, ключі шифрування та іншу інформацію в контракт на зберігання ключів, і використовувати адресу контракту на зберігання ключів як "адресу" користувача.
Використання ENS є дорогим. Сьогодні, у червні 2023 року, ситуація не така вже й погана: плата за транзакцію значна, але все ще порівнянна з платою за домен ENS. Реєстрація zuzalu.eth обійшлася мені приблизно в $27, з яких $11 - комісія за транзакцію. Але якщо у нас буде ще один бичачий ринок, гонорари злетять до небес. Навіть без підвищення ціни ETH, повернення плати за газ до 200 gwei призведе до збільшення податкового збору за реєстрацію домену до $104. Отже, якщо ми хочемо, щоб люди дійсно використовували ENS, особливо для таких випадків використання, як децентралізовані соціальні мережі, де користувачі вимагають майже безкоштовної реєстрації (і плата за домен ENS не є проблемою, оскільки ці платформи пропонують своїм користувачам субдомени), нам потрібно, щоб ENS працювала на L2.
На щастя, команда ENS активізувалася, і ENS на L2 дійсно відбувається! ERC-3668 (також відомий як "стандарт CCIP") разом з ENSIP-10 забезпечує можливість автоматичної перевірки субдоменів ENS на будь-якому L2. Стандарт CCIP вимагає створення смарт-контракту, який описує метод перевірки доказів даних на L2, а також домен (наприклад, домену). Optinames використовує ecc.eth) можна поставити під контроль такого контракту. Після того, як контракт CCIP контролює ecc.eth на L1, доступ до певного субдомену.ecc.eth автоматично передбачає пошук і перевірку доказу (напр. Merkle branch) держави в L2, яка фактично зберігає цей конкретний субдомен.
Насправді отримання доказів передбачає перехід до списку URL-адрес, що зберігаються в контракті, що схоже на централізацію, хоча я б стверджував, що це не так: це модель довіри 1 з N (недійсні докази відловлюються логікою перевірки у функції зворотного виклику CCIP-контракту, і поки хоча б одна з URL-адрес повертає дійсний доказ, ви в безпеці). Список URL-адрес може містити десятки з них.
Зусилля ENS CCIP - це історія успіху, і її слід розглядати як ознаку того, що радикальні реформи, яких ми потребуємо, насправді можливі. Але є ще багато інших реформ на рівні додатків, які потрібно буде зробити. Кілька прикладів:
Сьогодні гаманці займаються захистом активів. Все живе в ланцюжку, і єдине, що повинен захищати гаманець, - це приватний ключ, який в даний момент охороняє ці активи. Якщо ви зміните ключ, наступного дня ви зможете безпечно опублікувати свій попередній закритий ключ в Інтернеті. Однак у світі ZK це вже не так: гаманець не просто захищає облікові дані для автентифікації, він також зберігає ваші дані.
Перші ознаки такого світу ми побачили з Zupass, системою ідентифікації на основі ZK-SNARK, яка використовувалася в Зузалу. Користувачі мали приватний ключ, який вони використовували для автентифікації в системі, за допомогою якого можна було робити базові докази на кшталт "довести, що я є жителем Зузалу, не розкриваючи, якого саме". Але на систему Zupass також почали надбудовувати інші додатки, зокрема, марки (версія POAPs від Zupass).
Одна з моїх численних печаток Zupass, яка підтверджує, що я є гордим членом Team Cat.
Ключова перевага печаток над POAP полягає в тому, що вони є приватними: ви зберігаєте дані локально, і ви лише надаєте комусь печатку (або певні обчислення над печатками), якщо хочете, щоб вони мали цю інформацію про вас. Але це створює додатковий ризик: якщо ви втратите цю інформацію, ви втратите свої марки.
Звичайно, проблему зберігання даних можна звести до проблеми зберігання єдиного ключа шифрування: якась третя сторона (або навіть ланцюжок) може зберігати зашифровану копію даних. Це має зручну перевагу в тому, що ваші дії не змінюють ключ шифрування, а отже, не вимагають жодної взаємодії з системою, яка зберігає ваш ключ шифрування в безпеці. Але навіть якщо ви втратите ключ шифрування, ви втратите все. А з іншого боку, якщо хтось бачить ваш ключ шифрування, він бачить все, що було зашифровано цим ключем.
Де-факто рішення Zupass полягало в тому, щоб заохотити людей зберігати свої ключі на декількох пристроях (наприклад, на смартфонах, планшетних комп'ютерах). ноутбук і телефон), оскільки ймовірність того, що вони втратять доступ до всіх пристроїв одночасно, мізерно мала. Ми могли б піти ще далі і використовувати секретний доступ для зберігання ключа, розділеного між кількома хранителями.
Таке соціальне відновлення через MPC не є достатнім рішенням для гаманців, оскільки це означає, що не лише нинішні опікуни, а й попередні опікуни можуть вступити в змову з метою крадіжки ваших активів, що є неприйнятно високим ризиком. Але витік даних, як правило, є меншим ризиком, ніж повна втрата активів, і той, хто використовує дані з високими вимогами до конфіденційності, завжди може прийняти більший ризик втрати, якщо не створить резервну копію ключа, пов'язаного з цими вимогами до приватності.
Щоб не перевантажувати користувача візантійською системою декількох шляхів відновлення, гаманці, які підтримують соціальне відновлення, ймовірно, повинні будуть керувати як відновленням активів, так і відновленням ключів шифрування.
Однією зі спільних рис цих змін є те, що концепція "адреси", криптографічного ідентифікатора, який ви використовуєте для представлення "вас" в ланцюжку, повинна буде радикально змінитися. "Інструкції, як зі мною взаємодіяти" більше не будуть просто ETH-адресою; вони повинні бути в тій чи іншій формі комбінацією декількох адрес на декількох L2, стелс-мета-адрес, ключів шифрування та інших даних.
Один із способів зробити це - зробити ENS вашим ідентифікатором: ваш запис ENS може містити всю цю інформацію, і якщо ви надішлете комусь bob.eth (або bob.ecc.eth, або...), вони могли б шукати і бачити все про те, як платити і взаємодіяти з вами, включаючи більш складні міждоменні способи і способи збереження конфіденційності.
Але цей підхід, орієнтований на ENS, має дві слабкі сторони:
Одним з можливих рішень є включення більшої кількості речей до контракту на зберігання ключів, згаданого в архітектурі раніше в цьому пості. Контракт на зберігання ключів може містити всю різноманітну інформацію про вас і про те, як з вами взаємодіяти (а у випадку CCIP частина цієї інформації може бути поза мережею), і користувачі використовуватимуть свої контракти на зберігання ключів як основний ідентифікатор. Але фактичні активи, які вони отримують, зберігатимуться в найрізноманітніших місцях. Контракти сховища не прив'язані до імені, і вони є контрфактичними: ви можете згенерувати адресу, яка достовірно може бути ініціалізована лише контрактом сховища, що має певні фіксовані початкові параметри.
Інша категорія рішень пов'язана з повною відмовою від концепції адрес, звернених до користувача, в дусі платіжного протоколу Bitcoin. Одна з ідей полягає в тому, щоб більше покладатися на прямі канали зв'язку між відправником і одержувачем; наприклад, відправник може надіслати посилання на претензію (у вигляді URL-адреси або QR-коду), яке одержувач може використати для прийняття платежу за власним бажанням.
Незалежно від того, хто діє першим - відправник чи одержувач, більша довіра до гаманців, які безпосередньо генерують актуальну платіжну інформацію в режимі реального часу, може зменшити тертя. Тим не менш, постійні ідентифікатори зручні (особливо з ENS), а припущення про прямий зв'язок між відправником і одержувачем на практиці є дуже складним, тому ми можемо побачити комбінацію різних методів.
У всіх цих проектах першочерговим завданням є збереження децентралізації та зрозумілості для користувачів. Ми повинні переконатися, що користувачі мають легкий доступ до актуальної інформації про те, які їхні поточні активи і які повідомлення були опубліковані і призначені для них. Ці погляди повинні залежати від відкритих інструментів, а не від пропрієтарних рішень. Потрібно буде докласти чимало зусиль, щоб уникнути перетворення складної платіжної інфраструктури на непрозору "вежу абстракцій", в якій розробникам буде важко зрозуміти, що відбувається, і адаптувати її до нових умов. Незважаючи на труднощі, досягнення масштабованості, безпеки гаманців і конфіденційності для звичайних користувачів є вирішальним для майбутнього Ethereum. Йдеться не лише про технічну можливість, а й про фактичну доступність для звичайних користувачів. Ми повинні піднятися, щоб відповісти на цей виклик.
Partilhar
Особлива подяка Дену Фінлею, Карлу Флоершу, Девіду Хоффману та командам Scroll і SoulWallet за відгуки, рецензії та пропозиції.
По мірі того, як Ethereum переходить від молодої експериментальної технології до зрілого технологічного стеку, здатного забезпечити відкритий, глобальний і бездозвільний досвід для пересічних користувачів, є три основні технічні зміни, які стек повинен пройти приблизно одночасно:
Трикутник переходу екосистеми. Ви можете вибрати лише 3 з 3.
Без першого Ethereum зазнає невдачі, оскільки кожна транзакція коштує $3,75 ($82,48, якщо у нас буде ще один бичачий ривок), а кожен продукт, націлений на масовий ринок, неминуче забуває про ланцюжок і приймає централізовані обхідні шляхи для всього.
Без другої Ethereum зазнає невдачі, оскільки користувачам незручно зберігати свої кошти (і нефінансові активи), і всі переходять на централізовані біржі.
Без третього, Ethereum зазнає невдачі, тому що наявність всіх транзакцій (і POAP, і т.д.) у відкритому доступі для буквально кожного - це занадто велика жертва конфіденційності для багатьох користувачів, і всі переходять на централізовані рішення, які хоча б трохи приховують ваші дані.
Ці три переходи мають вирішальне значення з наведених вище причин. Але вони також є складними через необхідність інтенсивної координації для їх належного вирішення. Потребують поліпшення не тільки функції протоколу; в деяких випадках спосіб взаємодії з Ethereum повинен змінитися досить фундаментально, що вимагає глибоких змін з боку додатків і гаманців.
У світі масштабування L2 користувачі будуть існувати на багатьох L2. Чи є ви членом ExampleDAO, яка живе на Оптимізмі? Тоді у вас є акаунт на Оптимізмі! Ви тримаєте CDP в системі стейблкоінів на ZkSync? Тоді у вас є обліковий запис на ZkSync! Ви колись пробували якийсь додаток, який випадково опинився на Какароті? Тоді у вас є акаунт на Kakarot! Часи, коли користувач мав лише одну адресу, минули.
У мене є ETH в чотирьох місцях, якщо вірити моєму гаманцю Brave Wallet. І так, Arbitrum та Arbitrum Nova відрізняються. Не хвилюйтеся, з часом все стане ще більш заплутаним!
Гаманці смарт-контрактів додають ще більшої складності, оскільки набагато складніше мати одну і ту ж адресу на L1 і різних L2. Сьогодні більшість користувачів використовують зовнішні акаунти, адреса яких є буквально хешем відкритого ключа, який використовується для перевірки підписів - тому між L1 і L2 нічого не змінюється. Однак з гаманцями смарт-контрактів зберігати одну адресу стає складніше. Хоча було зроблено багато роботи, щоб зробити адреси хешами коду, які можуть бути еквівалентними в різних мережах, зокрема CREATE2 і фабрика синглетонів ERC-2470, важко зробити так, щоб це працювало бездоганно. Деякі L2 (напр. "ZK-EVMsтипу 4 ") не зовсім еквівалентні EVM, часто замість них використовується Solidity або проміжна збірка, що перешкоджає хеш-еквівалентності. І навіть коли ви можете мати хеш-еквівалентність, можливість зміни власника гаманця через зміну ключа створює інші неінтуїтивні наслідки.
Конфіденційність вимагає, щоб кожен користувач мав ще більше адрес, і може навіть змінювати, з якими саме адресами ми маємо справу. Якщо пропозиції стелс-адрес ста нуть широко використовуваними, замість того, щоб кожен користувач мав лише кілька адрес або одну адресу на L2, користувачі можуть мати одну адресу на одну транзакцію. Інші схеми конфіденційності, навіть вже існуючі, такі як Tornado Cash, змінюють спосіб зберігання активів по-іншому: кошти багатьох користувачів зберігаються в одному смарт-контракті (а отже, за однією адресою). Щоб надіслати кошти конкретному користувачеві, користувачі повинні покладатися на власну внутрішню систему адресації схеми конфіденційності.
Як ми бачили, кожен з трьох переходів по-різному послаблює ментальну модель "один користувач ~= одна адреса", і деякі з цих ефектів впливають на складність виконання переходів. Дві особливі складності полягають у наступному:
У мене є монети на Scroll, і я хочу заплатити за каву (якщо "я" - це буквально я, автор цієї статті, то "кава" - це, звісно, метонімія до "зеленого чаю"). Ви продаєте мені каву, але налаштовані лише на отримання монет на Тайко. Що робити?
В основному є два рішення:
Звичайно, ці рішення можна комбінувати: одержувач надає список L2, які він готовий прийняти, а гаманець відправника розраховує оплату, яка може включати або прямий переказ, якщо йому пощастить, або перехресний L2-переказ.
Але це лише один з прикладів ключової проблеми, яку створюють ці три переходи: такі прості дії, як сплата комусь, починають вимагати набагато більше інформації, ніж просто 20-байтна адреса.
Перехід на гаманці смарт-контрактів, на щастя, не є великим навантаженням на систему адресації, але в інших частинах стека додатків все ще існують деякі технічні проблеми, які необхідно вирішити. Гаманці потрібно буде оновити, щоб переконатися, що вони не відправляють тільки 21000 gas разом з транзакцією, і ще важливіше буде переконатися, що сторона, яка отримує платіж, відстежує не тільки перекази ETH з EOA, але і ETH, відправлені за допомогою коду смарт-контракту. Додатки, які покладаються на припущення, що власник адреси є незмінним (наприклад NFT, які забороняють смарт-контракти для стягнення роялті) доведеться шукати інші способи досягнення своїх цілей. Гаманці смарт-контрактів також спростять деякі речі - зокрема, якщо хтось отримає лише токен ERC20, який не є ETH, він зможе використовувати пей-майстри ERC-4337 для оплати за газ цим токеном.
З іншого боку, приватність знову ставить серйозні виклики, з якими ми ще не впоралися. Початкова версія Tornado Cash не створювала жодних проблем, оскільки не підтримувала внутрішні перекази: користувачі могли лише вносити кошти в систему та виводити їх з неї. Однак після того, як ви зможете здійснювати внутрішні перекази, користувачам потрібно буде використовувати внутрішню схему адресації системи конфіденційності. На практиці, "платіжна інформація" користувача повинна містити (i) певний "публічний ключ", тобто зобов'язання зберігати таємницю, яку одержувач може використовувати для здійснення витрат, і (ii) спосіб відправника надсилати зашифровану інформацію, яку може розшифрувати лише одержувач, щоб допомогти одержувачу виявити платіж.
Протоколи стелс-адрес покладаються на концепцію мета-адрес, які працюють наступним чином: одна частина мета-адреси є прихованою версією ключа витрат відправника, а інша частина - ключем шифрування відправника (хоча мінімальна реалізація може встановити ці два ключі однаковими).
Схематичний огляд абстрактної схеми стелс-адреси, заснованої на шифруванні та ZK-SNARK'ах.
Ключовий урок тут полягає в тому, що в екосистемі, дружній до приватності, користувач матиме як публічні ключі витрат, так і публічні ключі шифрування, а "платіжна інформація" користувача повинна містити обидва ключі. Є й інші вагомі причини, окрім платежів, щоб розширюватися в цьому напрямку. Наприклад, якщо ми хочемо отримати зашифровану електронну пошту на основі Ethereum, користувачам потрібно буде публічно надати якийсь ключ шифрування. У "світі EOA" ми могли б повторно використовувати для цього ключі від облікових записів, але у світі безпечних смарт-гаманців з контрактами нам, ймовірно, слід мати для цього більш чіткий функціонал. Це також допоможе зробити ідентифікацію на основі Ethereum більш сумісною з децентралізованими екосистемами конфіденційності, що не належать до Ethereum, зокрема, з ключами PGP.
Стандартний спосіб впровадження ключових змін та соціального відновлення у світі з багатьма адресами на користувача полягає в тому, що користувачі просто запускають процедуру відновлення на кожній адресі окремо. Це можна зробити в один клік: гаманець може містити програмне забезпечення для виконання процедури відновлення за всіма адресами користувача одночасно. Однак навіть з такими спрощеннями UX наївне багатоадресне відновлення має три проблеми:
Вирішити ці проблеми складно. На щастя, існує дещо елегантне рішення, яке працює досить добре: архітектура, яка розділяє логіку верифікації та зберігання активів.
Кожен користувач має контракт зі сховищем ключів, яке існує в одному місці (це може бути як основна мережа, так і певний L2). Таким чином, користувачі мають адреси на різних L2, де логіка перевірки кожної з цих адрес є вказівником на контракт зі сховищем ключів. Витрати з цих адрес вимагатимуть підтвердження, яке буде включено до контракту на зберігання ключів і показуватиме поточні (або, що більш реалістично, зовсім нещодавні) витрати відкритого ключа.
Доведення може бути реалізовано кількома способами:
Якщо ми хочемо уникнути створення одного підтвердження на кожну транзакцію, ми можемо реалізувати більш легку схему, яка вимагає лише крос-L2 підтвердження для відновлення. Витрати з облікового запису залежатимуть від витратного ключа, відповідний публічний ключ якого зберігається в цьому обліковому записі, але для його відновлення потрібна транзакція, яка копіює поточний витратний_публічний ключ у сховищі ключів. Кошти на контрфактичних адресах безпечні, навіть якщо ваші старі ключі не є безпечними: "активація" контрфактичної адреси, щоб перетворити її на робочий контракт, вимагатиме створення перехресного L2-доказу для копіювання поверх поточного spending_pubkey. У цій темі на форумі Safe описано, як може працювати подібна архітектура.
Щоб додати приватності такій схемі, ми просто шифруємо вказівник, а всі доведення виконуємо всередині ZK-SNARKs:
З більшою кількістю роботи (напр. використовуючи <a href="https://notes.ethereum.org/@vbuterin/non_index_revealing_proof"> this роботу як відправну точку), ми також могли б прибрати більшу частину складності ZK-SNARK і створити більш просту схему на основі KZG.
Ці схеми можуть ускладнюватися. З іншого боку, між ними існує багато потенційних синергій. Наприклад, концепція "контрактів на зберігання ключів" також може бути рішенням проблеми "адрес", згаданої в попередньому розділі: якщо ми хочемо, щоб користувачі мали постійні адреси, які не змінюються кожного разу, коли користувач оновлює ключ, ми можемо внести стелс-мета-адреси, ключі шифрування та іншу інформацію в контракт на зберігання ключів, і використовувати адресу контракту на зберігання ключів як "адресу" користувача.
Використання ENS є дорогим. Сьогодні, у червні 2023 року, ситуація не така вже й погана: плата за транзакцію значна, але все ще порівнянна з платою за домен ENS. Реєстрація zuzalu.eth обійшлася мені приблизно в $27, з яких $11 - комісія за транзакцію. Але якщо у нас буде ще один бичачий ринок, гонорари злетять до небес. Навіть без підвищення ціни ETH, повернення плати за газ до 200 gwei призведе до збільшення податкового збору за реєстрацію домену до $104. Отже, якщо ми хочемо, щоб люди дійсно використовували ENS, особливо для таких випадків використання, як децентралізовані соціальні мережі, де користувачі вимагають майже безкоштовної реєстрації (і плата за домен ENS не є проблемою, оскільки ці платформи пропонують своїм користувачам субдомени), нам потрібно, щоб ENS працювала на L2.
На щастя, команда ENS активізувалася, і ENS на L2 дійсно відбувається! ERC-3668 (також відомий як "стандарт CCIP") разом з ENSIP-10 забезпечує можливість автоматичної перевірки субдоменів ENS на будь-якому L2. Стандарт CCIP вимагає створення смарт-контракту, який описує метод перевірки доказів даних на L2, а також домен (наприклад, домену). Optinames використовує ecc.eth) можна поставити під контроль такого контракту. Після того, як контракт CCIP контролює ecc.eth на L1, доступ до певного субдомену.ecc.eth автоматично передбачає пошук і перевірку доказу (напр. Merkle branch) держави в L2, яка фактично зберігає цей конкретний субдомен.
Насправді отримання доказів передбачає перехід до списку URL-адрес, що зберігаються в контракті, що схоже на централізацію, хоча я б стверджував, що це не так: це модель довіри 1 з N (недійсні докази відловлюються логікою перевірки у функції зворотного виклику CCIP-контракту, і поки хоча б одна з URL-адрес повертає дійсний доказ, ви в безпеці). Список URL-адрес може містити десятки з них.
Зусилля ENS CCIP - це історія успіху, і її слід розглядати як ознаку того, що радикальні реформи, яких ми потребуємо, насправді можливі. Але є ще багато інших реформ на рівні додатків, які потрібно буде зробити. Кілька прикладів:
Сьогодні гаманці займаються захистом активів. Все живе в ланцюжку, і єдине, що повинен захищати гаманець, - це приватний ключ, який в даний момент охороняє ці активи. Якщо ви зміните ключ, наступного дня ви зможете безпечно опублікувати свій попередній закритий ключ в Інтернеті. Однак у світі ZK це вже не так: гаманець не просто захищає облікові дані для автентифікації, він також зберігає ваші дані.
Перші ознаки такого світу ми побачили з Zupass, системою ідентифікації на основі ZK-SNARK, яка використовувалася в Зузалу. Користувачі мали приватний ключ, який вони використовували для автентифікації в системі, за допомогою якого можна було робити базові докази на кшталт "довести, що я є жителем Зузалу, не розкриваючи, якого саме". Але на систему Zupass також почали надбудовувати інші додатки, зокрема, марки (версія POAPs від Zupass).
Одна з моїх численних печаток Zupass, яка підтверджує, що я є гордим членом Team Cat.
Ключова перевага печаток над POAP полягає в тому, що вони є приватними: ви зберігаєте дані локально, і ви лише надаєте комусь печатку (або певні обчислення над печатками), якщо хочете, щоб вони мали цю інформацію про вас. Але це створює додатковий ризик: якщо ви втратите цю інформацію, ви втратите свої марки.
Звичайно, проблему зберігання даних можна звести до проблеми зберігання єдиного ключа шифрування: якась третя сторона (або навіть ланцюжок) може зберігати зашифровану копію даних. Це має зручну перевагу в тому, що ваші дії не змінюють ключ шифрування, а отже, не вимагають жодної взаємодії з системою, яка зберігає ваш ключ шифрування в безпеці. Але навіть якщо ви втратите ключ шифрування, ви втратите все. А з іншого боку, якщо хтось бачить ваш ключ шифрування, він бачить все, що було зашифровано цим ключем.
Де-факто рішення Zupass полягало в тому, щоб заохотити людей зберігати свої ключі на декількох пристроях (наприклад, на смартфонах, планшетних комп'ютерах). ноутбук і телефон), оскільки ймовірність того, що вони втратять доступ до всіх пристроїв одночасно, мізерно мала. Ми могли б піти ще далі і використовувати секретний доступ для зберігання ключа, розділеного між кількома хранителями.
Таке соціальне відновлення через MPC не є достатнім рішенням для гаманців, оскільки це означає, що не лише нинішні опікуни, а й попередні опікуни можуть вступити в змову з метою крадіжки ваших активів, що є неприйнятно високим ризиком. Але витік даних, як правило, є меншим ризиком, ніж повна втрата активів, і той, хто використовує дані з високими вимогами до конфіденційності, завжди може прийняти більший ризик втрати, якщо не створить резервну копію ключа, пов'язаного з цими вимогами до приватності.
Щоб не перевантажувати користувача візантійською системою декількох шляхів відновлення, гаманці, які підтримують соціальне відновлення, ймовірно, повинні будуть керувати як відновленням активів, так і відновленням ключів шифрування.
Однією зі спільних рис цих змін є те, що концепція "адреси", криптографічного ідентифікатора, який ви використовуєте для представлення "вас" в ланцюжку, повинна буде радикально змінитися. "Інструкції, як зі мною взаємодіяти" більше не будуть просто ETH-адресою; вони повинні бути в тій чи іншій формі комбінацією декількох адрес на декількох L2, стелс-мета-адрес, ключів шифрування та інших даних.
Один із способів зробити це - зробити ENS вашим ідентифікатором: ваш запис ENS може містити всю цю інформацію, і якщо ви надішлете комусь bob.eth (або bob.ecc.eth, або...), вони могли б шукати і бачити все про те, як платити і взаємодіяти з вами, включаючи більш складні міждоменні способи і способи збереження конфіденційності.
Але цей підхід, орієнтований на ENS, має дві слабкі сторони:
Одним з можливих рішень є включення більшої кількості речей до контракту на зберігання ключів, згаданого в архітектурі раніше в цьому пості. Контракт на зберігання ключів може містити всю різноманітну інформацію про вас і про те, як з вами взаємодіяти (а у випадку CCIP частина цієї інформації може бути поза мережею), і користувачі використовуватимуть свої контракти на зберігання ключів як основний ідентифікатор. Але фактичні активи, які вони отримують, зберігатимуться в найрізноманітніших місцях. Контракти сховища не прив'язані до імені, і вони є контрфактичними: ви можете згенерувати адресу, яка достовірно може бути ініціалізована лише контрактом сховища, що має певні фіксовані початкові параметри.
Інша категорія рішень пов'язана з повною відмовою від концепції адрес, звернених до користувача, в дусі платіжного протоколу Bitcoin. Одна з ідей полягає в тому, щоб більше покладатися на прямі канали зв'язку між відправником і одержувачем; наприклад, відправник може надіслати посилання на претензію (у вигляді URL-адреси або QR-коду), яке одержувач може використати для прийняття платежу за власним бажанням.
Незалежно від того, хто діє першим - відправник чи одержувач, більша довіра до гаманців, які безпосередньо генерують актуальну платіжну інформацію в режимі реального часу, може зменшити тертя. Тим не менш, постійні ідентифікатори зручні (особливо з ENS), а припущення про прямий зв'язок між відправником і одержувачем на практиці є дуже складним, тому ми можемо побачити комбінацію різних методів.
У всіх цих проектах першочерговим завданням є збереження децентралізації та зрозумілості для користувачів. Ми повинні переконатися, що користувачі мають легкий доступ до актуальної інформації про те, які їхні поточні активи і які повідомлення були опубліковані і призначені для них. Ці погляди повинні залежати від відкритих інструментів, а не від пропрієтарних рішень. Потрібно буде докласти чимало зусиль, щоб уникнути перетворення складної платіжної інфраструктури на непрозору "вежу абстракцій", в якій розробникам буде важко зрозуміти, що відбувається, і адаптувати її до нових умов. Незважаючи на труднощі, досягнення масштабованості, безпеки гаманців і конфіденційності для звичайних користувачів є вирішальним для майбутнього Ethereum. Йдеться не лише про технічну можливість, а й про фактичну доступність для звичайних користувачів. Ми повинні піднятися, щоб відповісти на цей виклик.