Проведение пробного опроса с использованием смарт-контракта.
Продолжая тему «Как провести опрос» (1), я начну с объяснения третьей части.
Настроить таблицу сохранения третьего результата.
/// @abi table surveyresult i64 struct surveyresult { account_name owner; uint64_t no1count; uint64_t no2count; uint64_t no3count; uint64_t no4count; uint64_t primary_key() const {return owner;} EOSLIB_SERIALIZE(surveycon,(owner)(no1count)(no2count)(no3count)(no4count)) }; typedef multi_index<N(surveyresult),surveyresult> _result;
В зависимости от того, какой владелец установлен в качестве первичного ключа, объявите таблицу с номером 1 кумулятивного ответа опроса как no1count, а оставшиеся в порядке no2count, no3count, no4count.
Теперь добавьте существующую функциональность действия добавления, чтобы изменить таблицу результатов, когда пользователь вызывает действие добавления.
auto iter=result.find(_self); if(iter!=result.end()) { result.modify(iter,_self,[&](auto& surveyresult) { surveyresult.no1count = (selnum==1)?iter->no1count+1:iter->no1count; surveyresult.no2count = (selnum==2)?iter->no2count+1:iter->no2count; surveyresult.no3count = (selnum==3)?iter->no3count+1:iter->no3count; surveyresult.no4count = (selnum==4)?iter->no4count+1:iter->no4count; }); } else { result.emplace(_self,[&](auto& surveyresult) { surveyresult.owner = _self; surveyresult.no1count = (selnum==1)?1:0; surveyresult.no2count = (selnum==2)?1:0; surveyresult.no3count = (selnum==3)?1:0; surveyresult.no4count = (selnum==4)?1:0; }); }
Напишите добавление источника прямо над return; существующей функции добавления действия. Исходного кода может показаться много, но если таблицы результатов нет, то вставьте. Если есть таблица результатов, то модифицируйте. В случае emplace инициализирует начальное значение 1 или 0 в соответствии с selnum, которое является выбранным респондентом. В случае модификации измените существующее значение, добавив 1 в соответствии с selnum, которое является выбранным респондентом.
Наконец, действие для просмотра результатов. Это действие не обязательно является обязательным, поскольку в реальной ситуации мы можем просмотреть таблицу результатов непосредственно из сообщения eos.js или rpc.
void result() { _result result(_self,_self); uint64_t no1; uint64_t no2; uint64_t no3; uint64_t no4; auto iter=result.find(_self); if(iter!=result.end()) { no1=iter->no1count; no2=iter->no2count; no3=iter->no3count; no4=iter->no4count; } print("no1 : ",no1," no2 : ",no2," no3 : ",no3," no4 : ",no4); return; }
Вызовите данные таблицы результатов и распечатайте. В этом действии нет ничего необычного.
Теперь скомпилируйте и разверните исходный код для тестирования. Полный текст прилагается в конце статьи. Поскольку исходный код этого поста не проверяет дублирующиеся данные таблицы, рекомендуется действовать по порядку. Чтобы решить проблему с данными во время теста, мы добавили действие delall для удаления информации из всех таблиц, и вы можете увидеть это из всего источника внизу сообщения.
Сначала напишите опрос.
Опрос зарегистрирован. Я проверил таблицу Surveycon, чтобы подтвердить данные.
С разрешения пользователя user1 выберите номер 4.
Ошибка произойдет, если вы выберете дубликат, или если учетная запись не та, которая указана для действия.
С разрешения пользователя user2 выберите номер 4.
После выбора я проверил подробную таблицу опроса, чтобы проверить, что было выбрано для каждой учетной записи.
Напоследок распечатайте результат.
Я просмотрел таблицу результатов опроса, чтобы проверить результат печати.
Ниже приведен полный исходный код с действием delall, которое удаляет информацию из таблицы, чтобы упростить тестирование.
Исходный код этого поста не должен использоваться для фактического использования, потому что он был сделан в качестве примера, и поэтому многое было опущено и упрощено, чтобы упростить понимание кода. Фактический код должен быть разработан и реализован должным образом с точки зрения безопасности, стоимости и скорости. Спасибо за то, что следили за мной.
ITAM Games - блокчейн-платформа для прозрачной игровой экосистемы
Подпишитесь на ITAM Games и получайте самую свежую информацию.
Посетите Telegram ITAM Games, чтобы узнать о ITAM Games и Blockchain. Присоединяйтесь, перейдя по ссылке ниже! 👫
Сайт: https://itam.games
Telegram: https://t.me/itamgames