Как восстановить значение ZKsync из дельты state diff
Pubdata ZKsync может кодировать обновление как операцию над прежним значением. Если принять дельту за полный новый баланс, прибавление единицы превратится в почти полное исчезновение суммы.
Примените способ кодирования к предыдущему состоянию
Прочтите тип сжатия и длину по формату действующей версии протокола. Для Add прибавьте дельту к ранее восстановленному значению слота. В примере получится 1 000 001, а не единица.
initial slot value = 1,000,000
final slot value = 1,000,001
candidate encoding = Add(1)
Существуют также вычитание, преобразование и несжатое значение. Декодируйте указанный режим вместо догадки по числу байтов. До применения дельты определите правильный ключ слота или его индекс перечисления.
Начинайте с проверяемой границы состояния
Потоку дельт нужны правильные начальные значения. Старт с произвольного позднего пакета без исходного состояния может дать правдоподобные, но неверные числа. Сверяйте восстановленные обязательства состояния с записями пакетов. docs.zksync.io ZKsync documentation