На этой неделе меня заинтересовал адаптерный слой DuskEVM: он гораздо более интересный, чем стандартный питч «мы поддерживаем Solidity», с которым большинство EVM-цепочек выходят на рынок.
Вот в чем реальная проблема. Нативная цепь Dusk говорит на GraphQL и использует нечто под названием RUES для событий и состояния. У инструментов Ethereum нет понятия, что это такое. Любой эксплорер, кошелек и индексер ожидают блоки, receipts (отчеты о транзакциях), логи и доказательства, оформленные в очень конкретном «еврейском» (Ethereum) стиле. Поэтому между нативным состоянием Dusk и ожидаемой формой должно что-то встать и каждый раз корректно выполнять трансляцию. Одна несогласованная запись — и весь downstream-стек ломается тихо и без немедленного обнаружения.
Несколько несовпадений делают это особенно наглядным. Dusk измеряет значение в LUX на базовом уровне, тогда как EVM-инструменты ожидают wei, поэтому для каждого RPC-ответа нужна реальная конверсия, а не просто переименование. Депозиты, которые переносятся из Dusk L1 в DuskEVM, используют OP-стиль алиасинга адресов: потому что нет нативного способа определить, какой именно контракт реально вызвал мост или подбор значения, и tx.origin приходится восстанавливать через кроссдоменный обмен сообщениями. А так как финализация проводится на DuskDS вместо Ethereum, игровые механики споров и fault proofs (доказательства ошибочности), заимствованные из OP Stack, пришлось переработать с учетом собственного консенсуса Dusk, а не консенсуса Ethereum.
И вот что щелкнуло для меня. Форкнуть OP Stack — это не самая сложная часть. Секвенсор и генерация блоков остаются узнаваемыми как op-geth. Но settlement доказательств и семантика значений должны быть собраны заново — под нативный Dusk. Именно решение, где проходит эта граница, и есть главная инженерная работа.
#dusk $DUSK @Dusk
$ETH
Вот в чем реальная проблема. Нативная цепь Dusk говорит на GraphQL и использует нечто под названием RUES для событий и состояния. У инструментов Ethereum нет понятия, что это такое. Любой эксплорер, кошелек и индексер ожидают блоки, receipts (отчеты о транзакциях), логи и доказательства, оформленные в очень конкретном «еврейском» (Ethereum) стиле. Поэтому между нативным состоянием Dusk и ожидаемой формой должно что-то встать и каждый раз корректно выполнять трансляцию. Одна несогласованная запись — и весь downstream-стек ломается тихо и без немедленного обнаружения.
Несколько несовпадений делают это особенно наглядным. Dusk измеряет значение в LUX на базовом уровне, тогда как EVM-инструменты ожидают wei, поэтому для каждого RPC-ответа нужна реальная конверсия, а не просто переименование. Депозиты, которые переносятся из Dusk L1 в DuskEVM, используют OP-стиль алиасинга адресов: потому что нет нативного способа определить, какой именно контракт реально вызвал мост или подбор значения, и tx.origin приходится восстанавливать через кроссдоменный обмен сообщениями. А так как финализация проводится на DuskDS вместо Ethereum, игровые механики споров и fault proofs (доказательства ошибочности), заимствованные из OP Stack, пришлось переработать с учетом собственного консенсуса Dusk, а не консенсуса Ethereum.
И вот что щелкнуло для меня. Форкнуть OP Stack — это не самая сложная часть. Секвенсор и генерация блоков остаются узнаваемыми как op-geth. Но settlement доказательств и семантика значений должны быть собраны заново — под нативный Dusk. Именно решение, где проходит эта граница, и есть главная инженерная работа.
#dusk $DUSK @Dusk
$ETH
