контракте на Ethereum по принципу "один токен - один голос"?
Хотелось бы посмотреть на существующие решения. В частности как быть с тем фактом что во время голосования токены могут переходить от одного токенхолдера другому?
это может в jobs?
Самый простой вариант имхо фиксировать распределение токенов на конечный момент времени голосования. я бы так делал
я вот думаю следующее: 1) тот кто ставит вопрос на голование обозначает в каком блоке будут результаты (можно на фротенде примерно расчитывать что через 3 суток будет блок номер такой-то), голосованию присваваем порядковый номер. 2) каждый у кого есть токены может голосовать если номер текущего блока меньше блока окончания голосования 3) заводим счетчик проголосовавших "за", кто не проголосовал за считается проголосовавшим против. Голоса записываем в mapping (uint256=>address), где uint256 - номер проголосовашего "за", address - его адрес. У нас в итоге получится mapping (uint256=>mapping(uint256=address)) - где каждому номеру голосования (первый uint256) будет соотвествовать mapping c номерами и адресами прголосовавших за. Также сделаекм mapping(uint256=>uint256) где номеру голосования соотвествует количество проголосовавших "за", и mapping(uint256=>uint256) где номеру голосования будет сответвовать блок с результатами. 4) для определения результатов голосования внешним скритом (web3js) берем количество проголосовавших, циклом вытягиваем все адреса проголосовавшие "за", при этом по каждому адресу берем его баланс в токенах в блоке окончания результатов голосования, для этого в web3js вместо дефолтного "latest" указываем номер блока из которого мы берем состояние. myContractInstance.balanceOf.call(tokenHolderAddress, blockNumber) Таким образом получаем балансы в токенах всех адресов проголосовавших "за" по состоянию на момент окончания голосования, т.е. в блоке в котором голосование окончилось. Эти балансы складываем получаем количество голосов "за" Этот внешний скрипт, естественно, выкладываем в open source также как и код контракта, так чтобы каждый мог проверить. Ну и на фронтенде реализовать.
Посмотри что Polymath делает: https://github.com/PolymathNetwork/polymath-core/blob/dev-3.1.0/contracts/tokens/SecurityToken.sol Там идея чекпоинтов: можно узнать баланс на момент любого чекпоинта. И реализация голосовалки тоже где-то в этой репе лежит.
Обсуждают сегодня