Избирательные смарт-контракты

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

Как я могу генерировать отчеты в Solidity?

Ответы (2)

Вы не создаете отчеты в Solidity.

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

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

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

Вы можете (и должны) ограничить голосование периодом, когда выборы открыты. То есть не допускать никакого голосования после установленного срока. Вы также можете вернуть a bool, чтобы указать статус открытия/закрытия, чтобы клиенты могли знать, открыты ли выборы или закрыты.

modifier onlyIfOpen {
  require(isOpen());
  _;
}

function isOpen() public view returns(bool isIndeed) {
  return now < deadlinel;
}

Вы также можете по желанию вернуть победителя.

function blueTeamIsWinner() public view returns(bool isIndeed) {
  return blueCount > redCount;
}

Все упирается в то, что клиент проверяет контракт, а не запускает процесс по расписанию.

Надеюсь, поможет.