Разбор примера Aleo: голосование

Kaylej
3 min readFeb 27, 2023

--

В этой статье разберём пример программы, которая позволяет реализовать примитивный процесс голосования на блокчейне Aleo. Поскольку Aleo — приватная среда, то очевидно, что принцип работы здесь не схож с принципами других программ, работающих в публичных блокчейнах. Разберём основные различия:

  • Конкретно в примере, приведённом ниже, никто не может узнать, за кого голосующий отдал свой голос. Однако адрес голосующих адресов известен тому, кто создал голосование, поскольку ему же и предстоит предоставить адресам возможность голосовать.
  • Это не DAO. В основном, полагаясь на опыт публичных блокчейнов, мы можем видеть, как владельцы каких-либо токенов участвуют в голосованиях, где учитывается вес голоса, соизмеримый с кол-во имеющихся токенов голосующего. В нашем же случае все голоса имеют одинаковый вес, и нижеприведённый пример не стоит сравнивать с DAO.

Приступим к основе контракта:

Создадим шаблон “Proposal” (предложение). Здесь будет 4 поля с информацией, где одно из них является сложным (ProposalInfo содержит в себе 3 переменных, мы отдельно будем добавлять эту структуру в mapping и сделаем его публичным).

Далее создадим mapping для вывода публичной информации, также сделаем шаблон для тикета и публичные mapping для подсчёта голосов:

Теперь переходим к отдельной функции, которую сможет вызывать любой желающий.

непосредственно код
inputs

Функция propose выполняет аутентификацию (проверку) создающего предложение, затем генерирует id для предложения и создаёт новое поле в публичном маппинге tickets.

Далее функция new_ticket, которая создаёт тикет для указанного адреса (который сможет потом голосовать):

Далее функции для голосования:

Важно отметить, что адреса голосовавших “за” или “против” не сохраняются в какие-либо публичные маппинги, функции “agree” и “disagree” только увеличивают число в счётчике на 1.

Важно отметить, что это — демонстрационный вариант для реализации голосования на блокчейне Aleo, и он не подходит для реального использования. Здесь, к примеру, ещё нет проверки на повторный голос от одного и того же адреса.

--

--