Как привязать свидетельство MerkleMap в Mina к запрошенному ключу
Свидетельство MerkleMap в o1js восстанавливает корень и ключ. Если zkApp проверяет только корень, можно подтвердить другое поле той же карты.
Проверьте два листа с одинаковым значением
Разместите одинаковый лимит Алисы и Бориса под разными ключами. Запросите лимит Алисы, но передайте свидетельство Бориса. Корень совпадёт, поскольку лист Бориса тоже входит в карту. Дополнительно ограничьте восстановленный ключ ключом Алисы, одинаково выводимым при построении доказательства и в схеме.
const [root, key] = witness.computeRootAndKey(value);
root.assertEquals(trustedRoot);
key.assertEquals(requestedKey);
Привяжите корень к доверенному состоянию
Переданные вызывающим корень и согласованный путь могут описывать полностью вымышленную карту. Свяжите trustedRoot с удостоверенным состоянием контракта или проверенным публичным входом. Тогда ограничения зафиксируют нужное значение по нужному ключу для конкретного состояния карты.