Aleo SDK — это платформа для разработчиков, упрощающая создание новой учетной записи, создание транзакции и ее трансляцию в сеть. Для получения дополнительной информации об Aleo посетите страницу “Добро пожаловать в Aleo”, чтобы начать работу.
Закрытый ключ учетной записи используется для авторизации транзакции, которая обновляет глобальное состояние записей учетной записи. Ключ просмотра учетной записи используется для расшифровки записей учетной записи, которые зашифрованы под адресом учетной записи пользователя. Наконец, адрес учетной записи позволяет пользователям взаимодействовать друг с другом, отправляя и получая записи, которые кодируют значения и данные приложения.
Чтобы защитить пользовательские активы и записать данные , никогда не следует раскрывать закрытый ключ своей учетной записи третьим лицам. Для реальных приложений на Aleo пользователи должны получить вычислительный ключ из закрытого ключа своей учетной записи, чтобы позволить третьим сторонам ненадежно запускать приложения и генерировать транзакции от имени пользователя.
Чтобы создать новую учетную запись Aleo, запустите:
aleo account new [FLAGS] [OPTIONS]
Команду можно запустить со следующими необязательными параметрами:
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-s, --seed <seed>
2 Создание и сборка нового проекта
Чтобы создать новый проект, мы будем использовать newкоманду. Наш проект:
aleo new foo
Это создаст каталог foo и файлы с базовой структурой проекта:
README.md содержит скелет README с инструкциями по компиляции.
main.aleo основной файл исходного кода.
program.json , содержащий идентификацию проекта в формате JSON. В частности, адрес разработчика и его закрытый ключ для программы.
Файл main.aleo должен иметь следующее содержимое:
// The 'foo.aleo' program.
program foo.aleo;
function hello:
input r0 as u32.public;
input r1 as u32.private;
add r0 r1 into r2;
output r2 as u32.private;
Чтобы скомпилировать проект, запустите в главном каталоге:
aleo build
Вы увидите такой вывод:
⏳ Compiling 'foo.aleo'...
• Loaded universal setup (in 1478 ms)
• Built 'hello' (in 3250 ms)
✅ Built 'foo.aleo' (in "~/foo")
Во-первых, в вашу среду загружается «универсальная установка». Подробнее об этом можно прочитать здесь или в статье Marlin .
После того, как универсальная установка будет готова, каждая функция в вашем файле main.aleo будет создана, генерируя это в выходной папке:
hello.prover доказывающий функцию hello.
hello.verifier — верификатор helloфункции.
main.avm — байт-код вашей программы aleo, которую будет запускать виртуальная машина.
Как вы уже догадались, .avmна всю программу у нас всего один файл, но на каждую функцию свой прувер и верификатор.
3 Запуск программы
Вы можете запустить программу с помощью aleo runкоманды, за которой следует имя функции, которую вы хотите выполнить, и ее входные параметры.
aleo run hello 2u32 3u32
Когда выполнение завершится, вы должны увидеть следующий вывод:
Как видите, выходному регистру было присвоено 5u32значение, представляющее сумму входов.
4 Обзор программы
Давайте рассмотрим программу foo внутри файла main.aleo :
// The 'foo.aleo' program.
program foo.aleo;
function hello:
input r0 as u32.public;
input r1 as u32.private;
add r0 r1 into r2;
output r2 as u32.private;
Во-первых, нам нужно объявить программу следующим образом:
program foo.aleo;
После этого мы можем начать писать его функции (или другие структуры Aleo, такие как структуры, записи, замыкания, как мы увидим позже).
В случае с функциями все очень просто:
function [function_name]:
Функции состоят из трех основных частей:
Раздел ввода – Здесь мы объявляем его входные параметры: input r0 as u32.public; input r1 as u32.private; Все в инструкциях Aleo объявляется/хранится внутри регистра с типом ( i8, field, boolи т.д.) и опцией видимости ( publicили private), регистры именуются r0, r1, …, rn.В этом случае мы используем r0и r1для сохранения входных данных, переданных в последовательном порядке программе в качестве u32значений, где мы можем хранить 32-битные целые числа без знака для выполнения нашей операции суммирования.
Раздел инструкций – Следующий раздел состоит из ядра нашей функции, здесь мы называем количество инструкций Aleo, которое нам нужно, чтобы заставить нашу программу делать то, что мы хотим. Например, выполнение операции сложения: add r0 r1 into r2; За каждой инструкцией Aleo следуют ее входные параметры с определенными типами, а результат сохраняется в регистре into .Вы можете найти все доступные инструкции aleo здесь .
Выходной раздел – Подобно разделу ввода, раздел вывода делает то же самое для вывода программы. Это возврат функции. output r2 as u32.private;
5 Типы
Aleo использует строго типизированный синтаксис. Язык поддерживает 16 примитивных типов и позволяет пользователям определять собственные типы.
Примитивные типы Aleo включают:
address
boolean
field
group
i8
i16
i32
i64
i128
u8
u16
u32
u64
u128
scalar
string
Пользователи могут определять пользовательские типы с помощью ключевых слов structsили record. Мы рассмотрим их в следующих нескольких разделах.
1 Регистры
Регистры — это места, где вы храните данные, чтобы затем иметь возможность их изменять.
2 Интерфейсы
Интерфейсы — это определяемые пользователем структуры данных. Они очень похожи на традиционные структуры в обычных языках программирования. Вы можете хранить структуры в регистрах, как и любые другие типы данных Aleo.
Например, давайте создадим структуру, представляющую массив фиксированного размера из 3 элементов. Добавьте это внизу файла main.aleo :
struct array3:
a0 as u32;
a1 as u32;
a2 as u32;
Теперь, просто для примера, давайте напишем функцию, которая добавляет единицу к каждому элементу регистра с array3хранящимся в нем типом данных.
function sum_one_to_array3:
input r0 as array3.private;
add r0.a0 1u32 into r1;
add r0.a1 1u32 into r2;
add r0.a2 1u32 into r3;
cast r1 r2 r3 into r4 as array3;
output r4 as array3.private;
Как видите, мы можем ввести структуру в регистр r0и получить доступ к элементам структуры с помощью .синтаксиса. Мы выполняем addинструкцию для каждого элемента, сохраняя результаты в регистрах r1, r2и r3, наконец, используем команду cast для создания новой array3структуры в r4.
Теперь давайте запустим его. В этом случае единственная новая вещь, которую вам нужно знать, это то, что структуры передаются в CLI в следующем формате:
"{a0: 1u32, a1: 2u32, a2: 3u32}"
Теперь мы можем выполнить aleo runкоманду. Мы почистим проект, чтобы подобрать новый код:
Запись — это основная структура данных для кодирования пользовательских активов и состояния приложения. Они очень похожи на структуры, но имеют два необязательных параметра:
record token:
owner as address.private
gates as u64.private
относится к ownerадресу Aleo, которому принадлежит запись, и gatesпредставляет собой сумму кредитов, которую запись должна потратить.
Записи важны, потому что они представляют собой базовую структуру Aleo для управления состоянием в вашем приложении.
При выполнении функции Aleo в качестве входных регистров могут быть переданы только записи, принадлежащие адресу приложения. В противном случае возникнет ошибка, и приложение не запустится.
Вы можете найти адрес своего приложения для разработки внутри файла program.json :
В Aleo состояние приложения управляется с помощью записей. Учетная запись Aleo может создать транзакцию для использования записи и создания новой записи вместо нее. Записи в Aleo шифруются по адресу владельца записи, что гарантирует полную конфиденциальность всех записей в Aleo.
6 Ваша первая программа Aleo: выполнение перевода
Рассмотрим эту программу:
// The 'foo.aleo' program.
program foo.aleo;
record token:
owner as address.private;
gates as u64.private;
amount as u64.private;
function transfer_amount:
// sender token record
input r0 as token.record;
// receiver address
input r1 as address.private;
// amount to transfer
input r2 as u64.private;
// final balance of sender
sub r0.amount r2 into r3;
// final balance of receiver
add 0u64 r2 into r4;
// sender token record after the transfer
cast r0.owner r0.gates r3 into r5 as token.record;
// receiver token record after the transfer
cast r1 0u64 r4 into r6 as token.record;
// sender new token record
output r5 as token.record;
// receiver new token record
output r6 as token.record;
Во- первых, мы определяем наш собственный тип данных записи с именем token, который имеет два необязательных параметра ownerи gates, а также определяемый пользователем параметр с именем amount, представляющий количество имеющихся у нас токенов.
Эта transfer_amountфункция получает 3 входных параметра ( senderзапись, receiverзапись и amount) и сохраняет их в 3 регистрах ( r0, r1и r2). После этого он вычисляет окончательный баланс для них обоих и сохраняет его в r3и r4(используя инструкции sub и add для вычисления вычитания и сложения соответственно). С этими окончательными суммами он создает выходные записи для отправителя и получателя, сохраняя их в файлах r5и r6. Наконец, обе записи отправляются из функции вместе с инструкцией вывода .
Для запуска этой функции первым параметром является входная запись программы. Формат этого параметра такой же, как и для структурных типов:
Вот и все. Вы перевели свои первые собственные токены в Aleo!
Примечание: _nonceв инструкции Aleo не написано. Компилятор выводит _nonce в выходных данных записи. Пользователь должен предоставить его в качестве входных данных при использовании записи.
Я майню Aleo с прошлой недели на https://aleo.zionodes.com/ , и они раздают около 8-13 кредитов в день (по 10 000 c/s). К концу моего контракта у меня должно быть более 320 кредитов (примерно), которые будут конвертированы в соотношении 5:1 к монете. Итак, к запуску основной сети у меня должно быть около 60-65 монет. Хотя я думаю, что потенциал роста огромен, как вы думаете, сколько будет стоить каждая монета? Согласно текущему прогнозу, ожидается, что каждая монета будет стоить от 40 до 60 долларов. Если вы, ребята, уже изучили Aleo, как я, как далеко, по вашему мнению, зайдет проект? К вашему сведению: они уже привлекли около 290 миллионов долларов от инвесторов.
Подпишитесь на CryptoWikies сейчас и получите эксклюзивный доступ к богатству знаний от нашей команды экспертов. Они будут держать вас в курсе всех последних тенденций, стратегий и идей, касающихся майнинга и торговли биткойнами и альткойнами.
No Comments