Цей постулає радикальну ідею для майбутнього рівня виконання Ethereum, яка є такою ж амбіційною, як зусилля ланцюга променів для рівня консенсусу. Він спрямований на значне покращення ефективності рівня виконання Ethereum, вирішуючи один з основних масштабувальних проблем, і також може значно покращити простоту рівня виконання - фактично, це, можливо, єдиний спосіб цього зробити.
Ідея: замінити EVM на RISC-V як мову віртуальної машини, на якій написані розумні контракти.
Важливі пояснення:
Один прецедент для цього - Nervos CKB VM, яка в основному RISC-V.
На короткий термін основні підтягуючі фактори масштабованості Ethereum L1 вирішуються майбутніми EIP, такими як блокові списки рівня доступу, відкладене виконанняі розподілене зберігання історії плюсEIP-4444. У середньостроковій перспективі ми вирішуємо додаткові питання збездержавність та ZK-EVMs. На довгостроковий період основними обмежуючими факторами масштабування Ethereum L1 стають:
Я буду аргументувати, що заміна ZK-EVM на RISC-V вирішує ключове обмеження в (2) та (3).
Це таблиця кількості циклів, яку використовує Succinct ZK-EVM для доведення різних частин шару виконання EVM:
Є чотири частини, які займають значну кількість часу: deserialize_inputs, initialize_witness_db, state_root_computation та block_execution.
ініціалізувати_witness_db та state_root_computation стосуються дерева стану, а deserialize_inputs відноситься до процесу перетворення даних блоку та свідків у внутрішнє представлення; отже, реалістично понад 50% цього пропорційне розмірам свідка.
Ці частини можна значно оптимізувати, замінивши поточне дерево Меркла Патріція з 16-ичною кеккаком на бінарне дерево, яке використовує хеш-функцію, яка підходить для доказування. Якщо ми використовуємо Poseidon, ми можемодовести 2 мільйони хешів на секундуна ноутбуці (порівняно з ~15 000 хеш/сек для keccak). Є також багато інших варіантів, крім Poseidon. В цілому, є можливості масово зменшити ці компоненти. Як бонус, ми можемо позбутися accrue_logs_bloom, ну, позбутися цвіту.
Це залишає блок виконання, який становить приблизно половину циклів перевірки, витрачених сьогодні. Якщо ми хочемо збільшити ефективність загального перевірника в 100 разів, немає обходу факту, що нам потрібно щонайменше 50 разів підвищити ефективність перевірника EVM. Одне з можливих рішень - спробувати створити реалізації EVM, які є набагато ефективнішими з точки зору циклів перевірки. Інше, що ми можемо зробити, - помітити, що сьогодні перевірники ZK-EVM вже працюють, доводячи над реалізаціями EVM, скомпільованими до RISC-V, і надають розробникам смарт-контрактів прямий доступ до цього RISC-V VM.
Деякі цифри свідчать, що в обмежених випадках це може призвести до отримання ефективності більше ніж у 100 разів:
На практиці я очікую, що залиший час доведення стане домінуючим у тому, що сьогодні є попередні компілювання. Якщо ми зробимо RISC-V основним VM, то газовий графік відобразить часи доведення, і тому буде економічний тиск зупинити використання більш дорогих попередніх компілювань; але навіть тоді виграші не будуть настільки вражаючими, але у нас є вагомі підстави вважати, що вони будуть дуже значними.
(До речі, приблизно 50/50 розподіл між "EVM" та "іншими речами" також з'являється в звичайному виконанні EVM, і ми інтуїтивно очікуємо, що вигоди від видалення EVM як «посередника» повинні бути подібно великими
Існує кілька способів реалізації цього виду пропозиції. Найменш руйнівним є підтримка двох ВМ, а також дозвіл на написання контрактів у будь-якому з них. Обидва типи контрактів матимуть доступ до таких самих видів можливостей: постійного сховища (SLOAD і SSTORE), можливості утримувати баланси ETH, можливості здійснювати виклики та отримувати їх, тощо. Контракти EVM та RISC-V зможуть вільно викликати один одного; з точки зору RISC-V, виклик контракту EVM здасться йому системним викликом з деякими спеціальними параметрами; контракт EVM, що отримує повідомлення, інтерпретує його як ВИКЛИК.
Більш радикальний підхід з точки зору протоколу полягає в перетворенні існуючих контрактів EVM у контракти, які викликають контракт інтерпретатора EVM, написаний на RISC-V, який виконує їх існуючий код EVM. Це означає, що якщо у контракта EVM є код C, а інтерпретатор EVM знаходиться за адресою X, то контракт замінюється верхньою логікою, яка, коли викликається ззовні з викликом параметрів D, викликає X з (C, D), а потім очікує значення повернення та пересилає його. Якщо сам інтерпретатор EVM викликає контракт, просячи виконати CALL або SLOAD/SSTORE, тоді контракт це робить.
Проміжний шлях - це зробити другий варіант, але створити явну функцію протоколу для цього - в основному, узаконити концепцію "інтерпретатора віртуальної машини" та вимагати, щоб її логіка була написана на RISC-V. EVM буде першим, але можуть бути й інші (наприклад, Move може бути кандидатом).
Однією з ключових переваг другої та третьої пропозиції є значне спрощення специфікації рівня виконання - дійсно, цей тип ідеї може бути єдиним практичним способом зробити це, враховуючи велику складність навіть інкрементальних спрощень, таких як видалення SELFDESTRUCT. Tinygrad має твердий правило ніколи не перевищуючи 10000 рядків коду; оптимальний базовий рівень блокчейну повинен добре вписуватися в ці межі й навіть ставати ще меншим. Зусилля з розвитку ланцюга променів мають велике обіцяння щодо значного спрощення рівня згоди Ethereum. Але для виконавчого рівня, щоб побачити схожі вигоди, цей радикальний змінений може бути єдиним життєздатним шляхом.
Поділіться