ALEO COIN — Как создать кошелек и отправлять транзакции в сеть

ALEO COIN — Как создать кошелек и отправлять транзакции в сеть


Aleo SDK

Aleo SDK — это платформа для разработчиков, упрощающая создание новой учетной записи, создание транзакции и ее трансляцию в сеть. Для получения дополнительной информации об Aleo посетите страницу «Добро пожаловать в Aleo», чтобы начать работу.

Добро пожаловать в Aleo

https://developer.aleo.org/overview/

Руководство по сборке Aleo

1 Установите Rust

Мы рекомендуем устанавливать Rust с помощью rustup . Вы можете установить rustupследующим образом:

2 Сборка из исходного кода

GitHub Aleo

https://github.com/AleoHQ/aleo/releases

Мы рекомендуем устанавливать aleoтаким образом. В вашем терминале запустите:

# Download the source code
git clone https://github.com/AleoHQ/aleo.git

# Enter the 'aleo' directory
cd aleo

# Install 'aleo'
cargo install --path .

Теперь, чтобы использовать aleo, в вашем терминале запустите:

aleo

Руководство по использованию Aleo

Учетная запись Aleo состоит из закрытого ключа учетной записи , ключа просмотра учетной записи и адреса учетной записи .

Закрытый ключ учетной записи используется для авторизации транзакции, которая обновляет глобальное состояние записей учетной записи. Ключ просмотра учетной записи используется для расшифровки записей учетной записи, которые зашифрованы под адресом учетной записи пользователя. Наконец, адрес учетной записи позволяет пользователям взаимодействовать друг с другом, отправляя и получая записи, которые кодируют значения и данные приложения.

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

Создайте новую учетную запись Aleo здесь: https://aleo.tools/

1 Создайте новую учетную запись 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

Когда выполнение завершится, вы должны увидеть следующий вывод:

🚀 Executing 'foo.aleo/hello'...
 • Calling 'foo.aleo/hello'...
 • Executed 'hello' (in 1170 ms)
➡️  Output
 • 5u32
✅ Executed 'foo.aleo/hello' (in "[...]/foo")

Как видите, выходному регистру было присвоено 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 объявляется/хранится внутри регистра с типом ( i8fieldboolи т.д.) и опцией видимости ( publicили private), регистры именуются r0r1, …, 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инструкцию для каждого элемента, сохраняя результаты в регистрах r1r2и r3, наконец, используем команду cast для создания новой array3структуры в r4.

Теперь давайте запустим его. В этом случае единственная новая вещь, которую вам нужно знать, это то, что структуры передаются в CLI в следующем формате:

"{a0: 1u32, a1: 2u32, a2: 3u32}"

Теперь мы можем выполнить aleo runкоманду. Мы почистим проект, чтобы подобрать новый код:

aleo clean && aleo run sum_one_to_array3 "{a0: 0u32, a1: 1u32, a2: 2u32}"

И мы получаем новый array3элемент в качестве вывода:

🚀 Executing 'foo.aleo/sum_one_to_array3'...
 • Calling 'foo.aleo/sum_one_to_array3'...
 • Executed 'sum_one_to_array3' (in 1331 ms)
➡️  Output
 • {
  a0: 1u32,
  a1: 2u32,
  a2: 3u32
}
✅ Executed 'foo.aleo/sum_one_to_array3' (in "[...]/foo")

3 Записи

Запись — это основная структура данных для кодирования пользовательских активов и состояния приложения. Они очень похожи на структуры, но имеют два необязательных параметра:

record token:
    owner as address.private
    gates as u64.private

относится к ownerадресу Aleo, которому принадлежит запись, и gatesпредставляет собой сумму кредитов, которую запись должна потратить.

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

При выполнении функции Aleo в качестве входных регистров могут быть переданы только записи, принадлежащие адресу приложения. В противном случае возникнет ошибка, и приложение не запустится.

Вы можете найти адрес своего приложения для разработки внутри файла program.json :

{
    "program": "foo.aleo",
    "version": "0.0.0",
    "description": "",
    "development": {
        "private_key": "APrivateKey1zkpFsQNXJwdvjKs9bRsM91KcwJW1gW4CDtF3FJbgVBAvPds",
        "address": "aleo1x5nz5u4j50w482t5xtqc3jdwly9s8saaxlgjz0wvmuzmxv2l5q9qmypx09"
    },
    "license": "MIT"
}

4 Состояние Aleo

В 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 регистрах ( r0r1и r2). После этого он вычисляет окончательный баланс для них обоих и сохраняет его в r3и r4(используя инструкции sub и add для вычисления вычитания и сложения соответственно). С этими окончательными суммами он создает выходные записи для отправителя и получателя, сохраняя их в файлах r5и r6. Наконец, обе записи отправляются из функции вместе с инструкцией вывода .

Для запуска этой функции первым параметром является входная запись программы. Формат этого параметра такой же, как и для структурных типов:

{
  owner: aleo1x5nz5u4j50w482t5xtqc3jdwly9s8saaxlgjz0wvmuzmxv2l5q9qmypx09.private,
  gates: 0u64.private,
  amount: 50u64.private
}

Где:

  • владелец: общедоступный адрес программы, указанный development.addressв файле build/program.json.
  • ворота: ворота, которые есть у записи.
  • остальные параметры: в зависимости от самой программы (в данном примере мы использовали параметр amount со значением 50).

Давайте запустим transfer_amountфункцию (если вы следуете, не забудьте использовать адрес, найденный в program.json, для поля владельца):

aleo clean && aleo run transfer_amount "{
owner: aleo1x5nz5u4j50w482t5xtqc3jdwly9s8saaxlgjz0wvmuzmxv2l5q9qmypx09.private,
gates: 0u64.private,
amount: 50u64.private
}" aleo1h3gu7fky36y8r7v2x9phc434fgf20g8qd7c7u45v269jfw6vmugqjegcvp 10u64

Получаем следующие выходные записи:

🚀 Executing 'foo.aleo/transfer_amount'...
 • Calling 'foo.aleo/transfer_amount'...
 • Executed 'transfer_amount' (in 3520 ms)
➡️  Outputs
 • {
  owner: aleo1x5nz5u4j50w482t5xtqc3jdwly9s8saaxlgjz0wvmuzmxv2l5q9qmypx09.private,
  gates: 0u64.private,
  amount: 40u64.private
  _nonce: 2293253577170800572742339369209137467208538700597121244293392265726446806023group.public
}
 • {
  owner: aleo1h3gu7fky36y8r7v2x9phc434fgf20g8qd7c7u45v269jfw6vmugqjegcvp.private,
  gates: 0u64.private,
  amount: 10u64.private
  _nonce: 2323253577170856894742339369235137467208538700597121244293392765726742543235group.public
}
✅ Executed 'foo.aleo/transfer_amount' (in "[...]/foo")

Вот и все. Вы перевели свои первые собственные токены в Aleo!

Примечание: _nonceв инструкции Aleo не написано. Компилятор выводит _nonce в выходных данных записи. Пользователь должен предоставить его в качестве входных данных при использовании записи.

Aleo инструкции

Изучите самые важные концепции Aleo.

Выводы и размышления об AleoCoin

Я майню Aleo с прошлой недели на https://aleo.zionodes.com/ , и они раздают около 8-13 кредитов в день (по 10 000 c/s). К концу моего контракта у меня должно быть более 320 кредитов (примерно), которые будут конвертированы в соотношении 5:1 к монете. Итак, к запуску основной сети у меня должно быть около 60-65 монет. Хотя я думаю, что потенциал роста огромен, как вы думаете, сколько будет стоить каждая монета? Согласно текущему прогнозу, ожидается, что каждая монета будет стоить от 40 до 60 долларов. Если вы, ребята, уже изучили Aleo, как я, как далеко, по вашему мнению, зайдет проект? К вашему сведению: они уже привлекли около 290 миллионов долларов от инвесторов.


Вам нравится читать подобные статьи и вы хотите поддержать автора, тогда вы можете подписаться на наш телеграмм канал и посоветовать нас своим друзьям, это очень поможет поддержать наш проект! Telegram: CRYPTO WIKIES | Bitcoin & Altcoins Mining

Будь первым в курсе всех новостей, читайте больше про криптовалюты и майнинг на CRYPTO-MINING.BLOG.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *