October 17, 2023

Разбор программы аукцион на  Leo

Привет! В данной статье мы с вами разберём программу-пример под названием аукцион, которая представлена на сайте aleo.org. Её вы можете найти в разделе build -> aleo docs -> auction.

На сайте представлен подробный разбор алгоритма работы программы. Если кратко, то:

  1. Инициализируется аукцион.
  2. 1 участник делает ставку.
  3. 2 участник делает ставку.
  4. Выбирается победитель.
  5. Аукционист подводит итог.

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

Для начала давайте скачаем файлы программы с github.

Ссылка есть в статье или вы можете воспользоваться прямой ссылкой.

Теперь нам нужно перейти в папку workshop и нажать конпку code.

У нас есть 2 варианта загрузки файла. Или мы можем скачать zip архив. Или через командную строку по ссылке, которая указана. Давайте используем второй вариант. Открываем git bash (если вы не знаете, что это, то рекомендую прочитать мои статьи по установке leo) и вводим:

get clone https://github.com/AleoHQ/workshop.git

Таким образом, мы скачаем данную папку на наш компьютер. Предварительно можно было создать новую папку и перейти в неё с помощью команды:

cd \путь к файлу\

Я же скачал файл напрямую в корневую папку пользователя. Скачивается полностью папка workshop с другими примерами программ, отдельно файл аукциона у меня загрузить не получилось.

Теперь перейдём к визуализации работы программы. Для этого в папкей есть файл run.sh.

Чтобы его запустить переходим в папку с воркшопом:

cd workshop

И вводим команду:

cd auction && ./run.sh

Мы видим следующий результат

Визуализируются все 4 шага работы программы. Их я разбирал в начале статьи.

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

Для начала вводим первую ставку:

leo run place_bid aleo1yzlta2q5h8t0fqe0v6dyh9mtv4aggd53fgzr068jvplqhvqsnvzq7pj2ke 20u64

Например, укажем значение 20 типа u64.

Далее делаем вторую ставку размером 30 типа u64.

leo run place_bid aleo1esqchvevwn7n5p84e735w4dtwt2hdtu4dpguwgwy94tsxm2p7qpqmlrta4 30u64

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

Теперь нам нужно выбрать победителя. Для этого вводим код и аргументами указываем выходные данные (которые указаны в output) в кавычках, например:

leo run resolve "{
 owner: aleo1fxs9s0w97lmkwlcmgn0z3nuxufdee5yck9wqrs0umevp7qs0sg9q5xxxzh.private,
 bidder: aleo1yzlta2q5h8t0fqe0v6dyh9mtv4aggd53fgzr068jvplqhvqsnvzq7pj2ke.private,
 amount: 10u64.private,
 is_winner: false.private,
 _nonce: 4668394794828730542675887906815309351994017139223602571716627453741502624516group.public
 }" "{
 owner: aleo1fxs9s0w97lmkwlcmgn0z3nuxufdee5yck9wqrs0umevp7qs0sg9q5xxxzh.private,
 bidder: aleo1esqchvevwn7n5p84e735w4dtwt2hdtu4dpguwgwy94tsxm2p7qpqmlrta4.private,
 amount: 90u64.private,
 is_winner: false.private,
 _nonce: 5952811863753971450641238938606857357746712138665944763541786901326522216736group.public
 }"

На выходе получаем решение, что больше поставил второй участник аукциона:

Теперь осталось подвести итог с помощью функции finish.

leo run finish "{
 owner: aleo1fxs9s0w97lmkwlcmgn0z3nuxufdee5yck9wqrs0umevp7qs0sg9q5xxxzh.private,
 bidder: aleo1esqchvevwn7n5p84e735w4dtwt2hdtu4dpguwgwy94tsxm2p7qpqmlrta4.private,
 amount: 90u64.private,
 is_winner: false.private,
 _nonce: 5952811863753971450641238938606857357746712138665944763541786901326522216736group.public
 }"

Также аргументом в кавычках мы указываем выходные данные с прошлого этапа. И по результатам работы программы мы получаем:

Так работает данная программа. Я понимаю, что выглядит очень не user-friendly, но надеюсь, данная статья была вам полезна. До встречи!