Введение | Продолжение ЧАСТИ I:

В предыдущей части (здесь) мы обсуждали необходимость и преимущества децентрализованной системы голосования на выборах.

В этой части мы подробно обсудим работу децентрализованного приложения для голосования на выборах (Dapp) на локальном блокчейне Ethereum (Ganache) .

«DAPP» (ИЛИ) ДЕЦЕНТАЛИЗИРОВАННОЕ ПРИЛОЖЕНИЕ:-

Это полностью децентрализованное приложение из-за следующих моментов:

1. Сеть децентрализована (работает в одноранговой сети).

2. Данные децентрализованы, так как у каждого УЗЛА есть копия последней книги.

3. Код децентрализован, так как он находится на каждом узле блокчейна в виде развернутого смарт-контракта.

Работает:

Смарт-контракт написан с помощью программирования Solidity (‹appname›.sol) и содержит бизнес-логику приложения.

app.js используется для взаимодействия с внешним интерфейсом (UI) веб-приложения.

Пакет Truffle содержит следующие файлы кода для создания пользовательского интерфейса приложения: –

  • Index.html (код по умолчанию для интерфейса веб-приложения)
  • app.js (шаблонный код для логики взаимодействия с пользователем приложения (UI))

Некоторые «правила» для нашей локальной тестовой настройки выборов:

  • Каждый имеющий право избиратель (в данном случае адрес ETH) может голосовать только один раз на выборах.
  • Только смарт-контракт может добавлять действительных кандидатов на выборах. (подробно ниже).
  • Чтение в блокчейне (Ethereum) бесплатное, однако запись в блокчейне оплачивается газом (комиссией за транзакцию).

Каждый имеющий право голоса (в данном случае это адрес ETH) может проголосовать только один раз на выборах. Используя метаданные, мы создаем файл сопоставления для учетных записей избирателей, чтобы разрешить только одно голосование и запретить двойное голосование.

Только смарт-контракт может добавить действительных кандидатов на выборах.
Поскольку смарт-контракт находится в самой цепочке блоков, у каждого узла есть его копия, и любой самозванец не сможет добавить фальшивых/недействительных кандидатов, так как консенсус провалится и не примет фальшивого кандидата.

В веб-приложение добавлена ​​функция, показывающая адрес eth, с которым пользователь (избиратель) в настоящее время вошел в систему.

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

Мы моделируем (действительного) кандидата, используя структуру данных struct:

1. Уникальный идентификатор (Id)

2. Имя кандидата (имя)

3. Подсчет голосов (отслеживает количество голосов, полученных за каждого кандидата)

Переменная candidateCount в качестве счетчика для отслеживания числа кандидатов в сопоставлении.

В коде определена закрытая функция addCandidates, поэтому только код смарт-контракта может добавлять кандидатов на выборы.

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

Общедоступная функция vote определена для обеспечения возможности голосования для пользователей.

  • Запишите, проголосовал ли избиратель (или нет).
  • Обновите голоса, полученные за каждого кандидата, с помощью счетчика голосов.

Метамаска:

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

Для этого используется Metamask (metamask.io) — кошелек, совместимый с web3 и доступный в виде расширения для Chrome. Metamask позволяет нам использовать учетные записи, предоставленные в нашей цепочке блоков (Ganache), для голосования.

Тесты:

Тщательное тестирование смарт-контракта на отсутствие ошибок:

Причины:

  • Смарт-контракты неизменны, после развертывания их нельзя изменить.
  • Плата за развертывание смарт-контракта и многократное развертывание нежелательны.

Project использует тесты, созданные с использованием тестовой среды Mocha, для проверки:

  • Избиратель голосует впервые.
  • Голосование за недействительных кандидатов (кандидатов, не перечисленных в смарт-контракте).
  • Двойное голосование (многократное голосование).
  • Подтвердить подсчет голосов кандидатов.

Задачи:

Некоторые проблемы, присущие Dapps, работающим в сети блокчейн, перечислены ниже:

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

  1. Плата за газ необходима для каждой операции голосования, и она может колебаться.
  2. Обеспечьте отсутствие ошибок в коде смарт-контракта, чтобы снизить стоимость газа.

Обзор:

Хотя это приложение Election Dapp хорошо подходит для базового варианта использования, можно добавить дополнительные функции и функции, чтобы имитировать реальный сценарий:

  • Можно добавить таймер, чтобы проводить выборы только в течение ограниченного времени.
  • Возможность включать и ограничивать участие в выборах только предварительно зарегистрированных избирателей.

Репозиторий кода для проекта Dapp для голосования на выборах доступен на моей странице GitHub или dappuniversity.

Примечания:

  • Dapp для выборов работает на локальном блокчейне Ethereum, построенном на Ganache, и предоставляет нам 10 ETH-адресов (учетных записей) для работы.
  • Эти учетные записи содержат только поддельные ETH и не на самом деле стоят нам комиссию за газ при настройке.
  • Тем не менее, смарт-контракт для любого децентрализованного приложения должен быть тщательно протестирован в тестовой сети перед развертыванием в любом действующем блокчейне (основной сети).

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