Основы смарт контрактов - 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))