Почему переименование поля Candid может сломать клиенты

Candid кодирует метки полей числовыми идентификаторами. Переименование в исходном коде поэтому может изменить контракт, даже если тип значения сохранился.

Проверьте аргумент из старого клиента

Действующий клиент отправляет запись с обязательным полем amount. Новый метод с обязательным quantity ищет другую числовую метку. Можно переименовать локальную переменную после декодирования, сохранив внешний интерфейс. Для изменения передаваемого формата введите новую версию метода или спланируйте переход.

v1: record { amount : nat }
v2: record { quantity : nat }
client still sends the numeric field ID for "amount"

Проверьте совместимость в обе стороны

Сохраните примеры аргументов и ответов из выпущенного клиента. Декодируйте их новым интерфейсом и проверьте старый клиент на новых ответах. Успешный тест двух заново сгенерированных привязок может скрыть поломку у уже развёрнутых потребителей.

Источники