Введение в язык программирования Leo
Aleo собрал солидную команду компиляторов для создания очень амбициозного языка компилятора схем. Основная цель этой работы — позволить разработчикам максимально просто использовать доказательства с нулевым разглашением в своих приложениях — это достигается за счет минимизации требований к криптографическим знаниям. Так как же именно Leo достигает этого и что вам нужно знать, чтобы начать его использовать? Давайте узнаем.
Ключевые идеи Прежде всего, давайте кратко напомним себе, что такое доказательство с нулевым разглашением. Это некоторая часть данных, которая доказывает, что мы выполнили вычисления правильно; например, что мы использовали закрытый ключ для отправки кому-либо NFT или что у нас есть какой-то атрибут, который позволяет нам обновлять состояние приложения. Кроме того, это позволяет нам сохранять некоторые данные в секрете, если мы того пожелаем; например, нам не нужно раскрывать тот закрытый ключ, который мы использовали для отправки NFT. И данные доказательства также намного меньше, чем все вычисления, поэтому для них потребуется намного меньше места для хранения (в цепочке) и будет быстрее передаваться.
Это очень абстрактная идея, поэтому, возможно, она будет более актуальной, если мы свяжем ее с проблемами масштабируемости, которые мы наблюдаем в отрасли прямо сейчас. Взгляните на трудности, с которыми сталкиваются разные сети при получении достаточного количества транзакций в секунду, и на требования масштабирования решений для расширения возможностей онлайн-гейминга. Такие инструменты, как сегментирование состояния, были полезны, но нам нужно добавить больше, чтобы поддержать рост этих вариантов использования (и будущих вариантов использования, о которых мы пока даже не знаем). Более того, ZKP также позволяют нам скрывать данные, которые мы не хотим раскрывать; конечно, это невозможно для других решений масштабирования.
Теперь, как вы делаете ZKP? Что ж, это сделано для нас с помощью системы доказательств и чего-то, что называется схемой ZK - на самом деле это схема, которую нам нужно построить, и это то, что Лео сделает для вас! Библиотеки, которые превращают схемы ZK в пруфы, уже существуют, до сих пор люди использовали эти библиотеки напрямую.
Подумайте об устройстве, которое вы используете прямо сейчас, внутри него есть схемы, которые выполняют все эти вычисления, верно? Ну, разве эти схемы не просто вентили И-НЕ со свистящими через них нулями и единицами? Схемы ZK очень похожи, за исключением того, что вместо вентилей И-НЕ они сделаны из вентилей сложения и умножения, а вместо нулей и единиц у нас есть числа от нуля до p, где p — феноменально большое простое число. Вы начинаете понимать, что мы можем выполнять столько же вычислений в схемах ZK, сколько и в реальных схемах?
Теперь мы подходим к сути проблемы, причине, по которой Aleo вкладывает так много средств в создание компилятора схем Leo - превращение идей приложений высокого уровня в схемы ZK феноменально медленно, потому что вам нужно вручную собрать все элементы сложения и умножения для представлять, какие вычисления должны представлять ваше приложение. Я имею в виду, сколько времени у вас ушло бы на написание обычных приложений, если бы вам пришлось соединять вентили NAND для построения вычислений… Звучит не очень весело, верно?
Ну, это текущее состояние создания схемы ZK. По сути, вы должны работать на уровне построения схемы, потому что еще недостаточно инфраструктуры для автоматизации низкоуровневых повторяющихся частей. А на самом деле все еще хуже. Мало того, что у нас еще нет этих средств автоматизации, так еще и требуется много криптографических знаний даже для того, чтобы начать строить схемы ZK. Для преодоления этого барьера для входа в большинстве случаев людям требуется несколько месяцев очного обучения. Звучит не очень хорошо для разработки продукта.
Leo — это основанный на Rust язык программирования со статической типизацией, созданный для написания частных приложений. Он предназначен для разработчиков, которые могут интуитивно строить блокчейн Aleo, обеспечивая основу для частной децентрализованной экосистемы. Это первый известный язык программирования, который представляет среду тестирования, реестр пакетов, преобразователь импорта, удаленный компилятор и генератор теорем для приложений общего назначения с нулевым разглашением.
Leo разработан, чтобы устранить как можно больше требований к криптографическим знаниям. Более того, он разработан так, чтобы напоминать Javascript и Typescript, так что армия разработчиков JS/TS (около 12 миллионов из них, количество крипторазработчиков ничтожно мало) будет иметь очень простую кривую обучения.
Давайте прыгнем вперед и скажем, что вы написали программу Leo, подобную пузырьковой сортировке на изображении выше — что на самом деле делает Leo, когда вы запускаете программу?
Он берет ваш код, создает схему проверки, которая представляет вычисление, которое вы хотите запустить, заполняет входные проводники нужными значениями, запускает схему, генерирует ключи проверки/проверки, а затем объединяет все соответствующие данные в ZKP. Например, вы можете запустить его на входных данных на изображении ниже.
Но мы сказали, что вам вообще не нужно много криптографических знаний, чтобы использовать Leo, так что же это за создание доказательства? Подводя итог, можно сказать, что Leo выводит доказательство того, что вы выполнили свои вычисления правильно, а это означает, что если вы запустите описанную выше схему на некотором массиве и представите выходной массив вместе с доказательством, любой наблюдатель сможет подтвердить, что массив действительно был отсортирован по проверка доказательства, а не массива.
Это может показаться не таким уж большим, если массив содержит только 10 элементов, но когда мы начинаем работать со структурами данных, которые имеют миллионы элементов и более сложные вычисления, проверка доказательства (которое всегда одного размера!) начинает передавать намного больше ценности. Но это не пост о том, как извлечь выгоду из ZKP, этот пост призван помочь разработчикам изучить Leo, чтобы они могли сами создавать ценные приложения.
Leo также делает больше, чем просто создает для вас схему и генерирует на ее основе доказательство. Он наполнен функциональностью, которая помогает максимально сократить время разработки. Платформа тестирования, реестр пакетов и преобразователь импорта работают вместе, чтобы сэкономить разработчикам много времени, гарантируя, что внешние функции легко импортируются, и что код действительно делает то, что от него ожидалось.
Когда вы строите экосистему, основной целью которой является разработка масштабируемых частных приложений, один из лучших способов стимулировать рост — устранить как можно больше препятствий при разработке приложений. Это то, что Лев помогает достичь. Если вы хотите узнать больше, загляните на игровую площадку или в документацию для разработчиков.