Как найти причину отсутствия динамического поля Sui с числовым ключом
Клиент может показывать ключ «7», пока контракт ищет другое поле с тем же видимым номером. Важны ID родителя, тип ключа и его кодированное значение.
Воспроизведите расхождение на одном родителе
Возьмите новый registry в тесте Move. Первая проверка учитывает записанные типы ключа и значения, вторая использует более широкий тип ключа. Повторный add на том же родителе и типизированном ключе завершится ошибкой из-за существующей записи.
use sui::dynamic_field as df;
df::add(&mut registry.id, 7u8, 300u64);
assert!(df::exists_with_type<u8, u64>(®istry.id, 7u8), 0);
assert!(!df::exists_with_type<u64, u64>(®istry.id, 7u64), 1);
Различите отсутствующее имя и иной тип значения
Через exists проверьте наличие имени с исходным типом, затем через exists_with_type — тип значения перед заимствованием. Если имя найдено, а вторая проверка не прошла, сверьте развёрнутую схему с декодером клиента. Одно лишь изменение формата отображения числа расхождение типов не устранит.