Основы смарт контрактов - dapplicaio/waxio_document_russian GitHub Wiki

Смарт-контракт WAX включает в себя набор действий, определений типов и постоянное хранилище, что позволяет вашему dApp подписывать транзакции в WAX блокчейне. Когда вы вызываете смарт-контракт из front-end приложения:

  • ДЕЙСТВИЕ инициализируется
  • Сообщение отправляется в сеть WAX
  • Действие завершается, затем продолжается до следующего действия (если требуется)

Как это работает

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

Файлы заголовков

Файлы заголовков C ++ содержат глобальные декларации. Поскольку WAX использует форк EOSIO, все ваши смарт-контракты WAX будут наследоваться от контрактов и классов EOSIO. Файл заголовка eosio.hpp должен быть включен в каждый контракт, и каждый контракт должен расширять класс eosio::contract.

#include <eosio/eosio.hpp>

Это дает вашему смарт-контракту доступ к C/C ++ API WAX, позволяя вам определять действия и структуры, которые позволяют вашему смарт-контракту взаимодействовать с блокчейном WAX. Обратитесь к WAX-CDT API для получения дополнительной информации.

Действия

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

Действия включают следующие свойства:

  • Уровень разрешений: Каждое действие можно защитить различными разрешениями.
  • Код: это блокчейн аккаунт вашего смарт-контракта.
  • Действие: название действия.
  • Данные: Действия поддерживают различные типы данных и структуры.

Транзакции

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

Транзакции взаимодействуют с использованием двух моделей: встроенной и отложенной.

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

Для примера онлайн-транзакции см. в разделе Добавление встроенных действий EOSIO.

  • Отложенная. Отсроченное действие - это действие, которое планируется запустить в будущем, аналогично асинхронному вызову. Эти транзакции не гарантированно выполняются (существует вероятность того, что они будут отброшены нодой). При выполнении действия исходное (вызывающее) действие применяется к блокчейну WAX и не может быть отменено в случае сбоя отложенной транзакции.

Пример отложенной транзакции см. В разделе Отложенные транзакции EOSIO.

Разрешения

Смарт-контракт и Учетная запись WAX Blockchain обмениваются данными, используя действия, определенные в вашем смарт-контракте. Вы можете обезопасить свои действия, используя разрешения учетной записи WAX. Включив метод require_auth() в свои действия, вы можете проверить, что вызов действия был инициирован учетной записью блокчейна вашего смарт-контракта. Вы также можете использовать метод require_auth() для защиты пользовательских действий WAX, таких как обновление пользовательской записи. Требование проверки подлинности для пользовательских действий может гарантировать, что только ваш клиент может выполнить это действие, а не кто-то другой.

Разрешения также позволяют вашим смарт-контрактам обрабатывать уведомления и выполнять действия для других смарт-контрактов (используя разрешение eosio.code).

Обратитесь к разделу Учетные записи и разрешения EOSIO для получения дополнительной информации.

Постоянные данные

Каждый раз, когда вы вызываете одно из действий вашего смарт-контракта из своего приложения, создается новый экземпляр вашего смарт-контракта. Этот новый экземпляр ничего не знает ни о каких предыдущих контрактных состояниях. Когда действие завершается, этот экземпляр уничтожается. Чтобы сохранить данные между действиями одного или нескольких ваших смарт-контрактов, вам необходимо использовать функциональность таблицы multi_index.

Примечание. Постоянные данные хранятся в RAM ноды WAX и влияют на объем WAX, который вам потребуется застейкать для смарт-контракта.

Обратитесь к разделу Data Persistence EOSIO за дополнительной информацией.

WAX Диспетчеры

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

Basic Structure

Вот пример шаблона смарт-контракта с общими элементами.

#include <eosio/eosio.hpp>

using namespace eosio;

CONTRACT mycontract : public eosio::contract {
public:
    using contract::contract;

    ACTION action1(name user) {
        require_auth(user);
    }

private:
    TABLE customer {
        name key;
        std::string first_name;
        std::string last_name;

        uint64_t primary_key() const { return key.value; }
    };

    typedef eosio::multi_index<"customers"_n, customer> customer_index;

};
EOSIO_DISPATCH(mycontract, (action1))

Что дальше?


Создание смарт контракта