Контракт DuskVM может пережить отказ узла, пока моё приложение внезапно забывает, как с ним разговаривать.

Причина кроется внечейн. Forge собирает два артефакта WASM из одного и того же исходника: контракт, который работает в DuskVM, и драйвер данных, который выполняет преобразование читаемого JSON в rkyv и обратно. Этот драйвер не разворачивается как часть on-chain контракта.

Если я хочу, чтобы маршруты JSON-контракта Rusk выполняли это преобразование, владелец контракта регистрирует драйвер на этом узле.

Поэтому я могу развернуть один раз, протестировать на Node A, увидеть чистые читаемые вызовы, а затем переключиться на Node B и попасть в странное состояние. Контракт на месте. Цепь здорова. Но driver_available может быть false, и тогда приложению недоступна декодирующая прослойка, на которую оно было рассчитано.

Это производственная ловушка для меня. Консенсус не дал сбой. Контракт не дал сбой. Мой failover изменил внецепочную зависимость, которую я считал, что она «переезжает» вместе с контрактом.

Я бы сделал доступность driver’а частью готовности узла и проверял её на каждом endpoint Rusk перед тем, как туда начнёт поступать трафик.

В DuskVM контракт может пережить failover, тогда как его транслятор — нет.

#dusk $DUSK @Dusk