May 25, 2023

#4 Путь разработчика Leo

Привет! Сегодня мы продолжаем изучать язык программирования Leo. Если вы не видели предыдущие статьи, то https://teletype.in/@romacll/WdJncXdkfU1 , https://teletype.in/@romacll/huBkMaMFLsO, https://teletype.in/@romacll/pnG4mdGrgT3 доступны. Сегодня же, исходя из плана, мы говорим про переменные.

План на эту серию статей

Aleo studio

Для начала давайте скачаем IDE Aleo Studio чтобы было удобнее редактировать код. Для этого переходим по ссылке: https://www.aleo.studio/, скачиваем IDE и производим простую установку. Далее открываем приложение и создаём программу.

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

Переменные

Для того чтобы создать переменную мы вводим

let b: u8 = 1u8;

let - это команда для создания переменной, b в данном случае - это имя переменной. Далее указывается тип переменной, здесь это u8. После пишется равно и значение переменной с указанием типа и битности (u8).

Leo поддерживает целые типы со знаком i8, i16, i32, и беззнаковые целые типы u8, u16, u32, u64, u128. То есть, если вам требуется положительное число, то выбирайте тип "u", если и положительное и отрицательное, то "i".

Битность числа (8, 16, 32..) определяет то, какое максимальное значение может хранить данная переменная.

Важно учитывать, что если вы решить выбрать знаковое число (i), то данное число будет в 2 раза меньше в диапазоне положительных чисел. То есть переменная типа i8 может содержать значение в диапазоне от -127 до 127.

Leo в данный момент не поддерживает дробные числа. Если же они вам потребуются, то возможное решение приведено в их блоге: https://www.aleo.org/post/fixed-point-arithmetic-in-the-zksnark-based-programming-language-leo. В данной статье мы не будем углубляться в эту тему.

Boolean

Leo поддерживает традиционные trueили falseлогические значения. Чтобы создать такую переменную вводим

let b: bool = false;

Если же мы хотим присвоить данное переменной новое значение, то вводим

b: bool = false;

С данным типом переменных всё достаточно просто, говоря про иные типы напоминаю, что важно указывать их тип, например

let a: u8 = 2u8; // так правильно let b: u8 = 2; // так не правильно

Мне потребовалось достаточно много времени чтобы окончательно привыкнуть к этому.

Field

Leo поддерживает fieldтип для элементов базового поля эллиптической кривой. Это целые числа без знака ниже модуля базового поля. Что бы это не значило :)

Создаются данные переменные следующим образом.

let a: field = 1field; let b: field = 21888242871839275222246405745257275088548364400416034343698204186575808495617field;

Для себя я понял, что если вам требуются очень большие числа, то тип field для вас. Он может иметь значения вплоть до 253 bit.

Scalar

Leo поддерживает scalarтип для элементов скалярного поля подгруппы эллиптической кривой. Это целые числа без знака ниже модуля скалярного поля. Я думаю, что если вы знаете криптографию, то поняли о чем это. Я же, как новичок, не нашел этому применение.

Создается данный тип следующим образом

let a: scalar = 1scalar;

Адреса

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

let receiver: address = aleo1ezamst4pjgj9zfxqq0fwfj8a4cjuqndmasgata3hggzqygggnyfq6kmyd4;

Кстати, вы можете сгенерировать адрес на сайте https://aleo.tools/, нажав кнопку "Generate".

Создание программы

На десерт давайте создадим программу, которая будет определять, является ли число четным. Для этого она будет искать остаток от деления данного числа на 2, если остаток равен 0, тогда число является четным.

Создаем функцию в которую поступает 1 переменная типа u32, а на выходе переменная типа bool (если число четное, то она имеет значение true, иначе имеет значение false).

transition main(public a: u32) -> bool {

Далее нам требуется создать переменную типа boolean, которая будет хранить в себе это решение.

let b: bool = false;

Следующим шагом нам нужно использовать логическое условие if-else. Если остаток от деления числа на 2 равен 0, тогда задаем переменной b значение true и возвращаем её, иначе возвращаем b без изменений (так как при создании мы задали значение false).

Так это выглядит в форме готового кода.

if a % 2u32 == 0u32 {

            b = true;

            return b;

        } else {

            return b;

       }

Также не забываем изменить входные данные, например, на число 4u32.

[main]

public a: u32 = 4u32;

И при запуске программы мы имеем следующий результат.

Мы получили true, так как число четное.

Если у вас остались вопросы, то рекомендую посмотреть данную статью в видео-формате на моем youtube канале по ссылке: https://youtu.be/kxnWJVuIZEY

Полезные ссылки

Статья Aleo по этой теме: https://developer.aleo.org/leo/language

Плейлист на youtube с содержанием статей: https://www.youtube.com/playlist?list=PLsvDEBW3znFJBJaDj_nSzT5H7D3-BPZGE