Как да направите анкета с интелигентен договор EOS (1)

Изготвяне на примерно проучване с помощта на интелигентен договор.

Поздрави, това е Jaehyun Sim от ITAM Games. В тази публикация ще дам пример за извършване на проучване, използвайки интелигентен договор.

Имайте предвид, че извадката е направена да поддържа ниво на простота и следователно може да не е практична за реална употреба, но фиксираните изисквания са включени.

Да започна

Първо, нека го нарисуваме в нашите глави.

  1. Създателят на договора въвежда описанието на анкетата и съдържанието на четирите опции.
  2. Общият потребител изпраща номера на сметката си и номера, който е избрал в договора.
  3. Всички потребители използват договора за преглед на резултатите.
  4. Общите потребители няма да могат да променят резултатите от проучването, след като са избрали.

Изискванията са структурирани по време на организирането и изглежда, че трябва да има 3, за да се структурира просто. Значение 2 ~ 3 таблици.

Конфигурация на действието

Действието беше конфигурирано както по-долу.

  1. csurvey: Въведете ново проучване
  2. добавяне: Участвайте в проучването
  3. резултат: Преглед на резултатите от проучването

Конфигурация на таблицата

Таблицата също е конфигурирана на 3 части, както е посочено по-долу.

  1. Таблица с информация от анкетата и 4 опции.
  2. Таблица, която запазва участниците в проучването и техния избор.
  3. Таблица, която събира и запазва резултатите.

Не мисля, че трябва да има проблеми, ако смесите 1 и 3, но за да сте сигурни, че компонентите са видими, ще разделя в този пример.

#include 
#include 
използване на пространство на имена eosio;
проучване на класа: обществено eosio :: договор
{
  публичния:
    използване на договор :: договор;
/// @abi действие
    невалидна проверка ()
    {
      печат ("вашето обаждане към csurvey");
    }
/// @abi действие
    невалиден добавяне ()
    {
      печат ("вашето обаждане за добавяне");
    }
/// @abi действие
    невалиден резултат ()
    {
      печат ("вашето обаждане за резултат");
    }
};
EOSIO_ABI (проучване, (csurvey) (добавяне) (резултат))

Направете прост скелет и ние ще въведем тестово отпечатване на код („вашето призив към csurvey“) във всяко действие. Компилирайте източника и тествайте след публикуването. (Моля, вижте предишната публикация за методи за съставяне, публикуване и изпълнение на договор)

Можете да видите, че всяко действие работи без проблеми.

изпълнение

Първо направете таблица, която ще бъде използвана при csurvey действие

използване на пространство на имена eosio;
използване на stdpace пространство на имената;
,
,
,
/// @abi таблица опросник i64
    Structureconcon
    {
      собственик на имена на акаунт;
      низов въпрос
      string no1con;
      string no2con;
      string no3con;
      string no4con;
uint64_t basic_key () const {return owner;}
EOSLIB_SERIALIZE (surveycon, (собственик) (въпрос) (no1con) (no2con) (no3con) (no4con))
    };
typedef multi_index  _последствие

За да използвате променлива за низове, първо използвайте пространството от имена std (използвайки пространството имена std;). След това определете таблиците, необходими на интелигентния договор като структури. Таблиците трябва да имат първичен ключ за търсене. Основният ключ не трябва да е дубликат или празен. В този пример, тъй като ще направим само едно проучване, използвайте основния ключ като акаунта на смарт договора, а останалите данни от проучване, answer1, answer2, answer3, answer4 са декларирани като тип низ.

Сега въведете функцията csurvey за действие.

/// @abi действие
    void csurvey (string въпрос, string no1con, string no2con, string no3con, string no4con)
    {
      _ проучване (_ себе си, _ себе си);
      
      survey.emplace (_ себе си, [&] (автоматично и анкета)
      {
        surveycon.owner = _self;
        surveycon.question = въпрос;
        surveycon.no1con = no1con;
        surveycon.no2con = no2con;
        surveycon.no3con = no3con;
        surveycon.no4con = no4con;
      });
се върне;
    }

Първо определете данните, които да преминат към действие. Получихме низовите данни на въпроса, който ще бъде въведен в таблицата, и отговорите на 1 ~ 4. Сега въведете данните от csurvey в таблицата. В интерес на простото обяснение не преодоляхме проблема с дублирането на ключове.

На следващо място, създайте таблицата, която потребителите ще запазят в тях.

/// @abi таблична анкетаdetail i64
    Struveydetail
    {
      account_name кой;
      uint64_t selnum;
uint64_t Primary_key () const {return who;}
EOSLIB_SERIALIZE (surveydetail, (който) (selnum))
    };
    typedef multi_index  _items;

За да запазите кой е запазил кой номер, определете кой променлива и избрания номер, sennum. Използвал съм кой (акаунта) като основен ключ, а _items като тип.

Сега изпълнете действието за добавяне.

/// @abi действие
    невалидно добавяне (user_name user, uint64_t selnum)
    {
      require_auth (употреба);
_items елемент (_ себе си, _ себе си);
item.emplace (_ себе си, [&] (автоматично и проучване) {
        surveydetail.who = потребител;
        surveydetail.selnum = selnum;
      });
    се върне;
    }

Този код не се различава от действието на csurvey по-горе. Може да е странно, защото всичко, което направихме, беше да съхраним на масата, че има участие в проучването, но ще добавим функционалността в следния код. Requ_auth (потребител) в горната част на кода се сравнява, за да се провери дали правата за изпълнение на договора са в съответствие с потребителя. Тъй като eosio ви позволява да призовавате действия към правата за изпълнение на множество акаунти, е трудно да разграничите правото на изпълнение на договор и правото да изпълните действие. Следователно ние използваме функцията, за да проверим дали договорът е изпълнен с необходимите права за изпълнение на акаунта, след като в данните на действието въведем името на необходимия акаунт.

Това съдържание ще продължи и в следващата публикация поради дължината му.

ITAM Games е блокчейн платформа за прозрачна игрова екосистема

Абонирайте се за ITAM Games и ще получите най-новата информация.

Посетете ITAM Games Telegram, за да комуникирате относно ITAM Games и Blockchain. Присъединете се, като кликнете върху връзката по-долу!

Уебсайт: https://itam.games
Telegram: https://t.me/itamgames