Контракт 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
Причина кроется внечейн. 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


