TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.49K subscribers
Post #1371 874
Как работает ZKVM. Часть 2

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

- Мы удалили опкод POP, поскольку он больше не нужен;
- Мы добавили опкоды ADD и MUL;

Вспомните, что предыдущие правила копирования предыдущего стека были следующими:

- A. Если sp равен 1 или больше, а столбец j находится на 1 индекс ниже sp, и текущая инструкция - PUSH или NOP, мы должны скопировать столбец j;

- B. Если sp равно 2 или больше, и столбец j находится на 2 индекса ниже sp, а текущая инструкция - POP, мы должны скопировать столбец j;

Правило A остается неизменным, а вот B нужно обновить следующим образом:

- B. Если sp равно 2 или больше, а столбец j находится на 3 индекса ниже sp, и текущая инструкция - ADD или MUL, мы должны скопировать столбец j;

Причина этого изменения в том, что предыдущая инструкция POP не изменяла второй по счету элемент стека, а только удаляла верхний. Однако ADD дважды открывает стек и выводит сумму. Аналогично, MUL дважды открывает стек и вставляет произведение.

Предыдущая реализация стека только записывала новые значения в указатель стека. Однако новая реализация может записывать сумму или произведение на два индекса ниже указателя стека. Например, 12 в стеке ниже станет 15 после сложения, а это место находится на два индекса ниже указателя стека:

Перед добавлением:
[12 , 3, sp] (sp = 3)


После сложения:
[15, sp] (sp = 2)


Здесь у нас есть 12 в качестве нижней части стека и sp, указывающий на пустое пространство над стеком.

Поэтому нам нужен сигнал, указывающий на то, что определенный столбец находится на два элемента ниже указателя стека.

Приведенный в оригинальной статье код в значительной степени заимствован из стека предыдущей главы, но в нем реализованы обновления, описанные в этой главе. А именно:

- Мы заменили NOP, PUSH и POP на NOP, PUSH, ADD и MUL. ADD и MUL уменьшают указатель стека на единицу, NOP сохраняет указатель стека неизменным, а PUSH увеличивает указатель стека на единицу и копирует свой аргумент в вершину стека.

Если хотите покопаться в самом коде, то лучше перейти на оригинальную статью, где он представлен в развернутом виде - https://www.rareskills.io/post/zkvm.

Также его можно перенести в редактор кода с нейронными сетями и изучить, разбивая на небольшие сниппеты.

#zkvm
  • 👍 3
More from @solidityset
  1. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  2. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  3. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  4. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
  5. Sep 9, 2026Работа с чистой энергией Дисклеймер Сегодня ава и название канала, наконец, поменялись. Я…
  6. Sep 9, 2026Channel name was changed to «Из Solidity в AI и дальше»
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →