Как восстановить значение 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