EOSDEV #4. Сущности в блокчейн сети EOS
По плану у меня был пост, рассматривающий аутентификацию в смарт контрактах. Но сейчас у разработчиков EOS в работе тикет по переименования кода C++ из CamelCase
в under_score
. Куча несостыковок, бранч master
не собирается, а делать примеры для старого кода нет смысла. Поэтому в этот раз немного теории.
Сущности
В EOS в нашем распоряжении имеется определенное количество сущностей, которые взаимодействуют между собой. Для разработки смарт-контрактов нам явно не помешает способность хорошо разбираться в этих вещях. Вот список наиболе популярных сущностей, с которыми нам предстоит сталкиваться:
- Account
- Key Pair
- Wallet
- Contract
- Message
- Transaction
Оперировать с данными ними можно несколькими способами:
- Напрямую с нодой через HTTP API запросы (должен быть подключен соответствующий плагин)
- Через клиентов к вышеупомянотому API (консольный клиент
eosc
, JavaScript клиентeosjs
, клиенты на других языках программирования) - Из исходного кода смарт-контракта (только Message и Transaction)
Account
Аккаунт используется пользователем либо напрямую, либо в него загружается смарт-контракт. Представляет собой строку длиной от 2 до 32 символов. Имеет следующие основные связи:
- как минимум 2 ключа Key (для каждого из разрешений
owner
иactive
), которые задаются при его создании - родительский аккаунт, который задается при его создании
- набор разрешений (permissions)
eosc create account creator_account my_new_account $OWNER_PRIVATE_KEY $ACTIVE_PRIVATE_KEY
Key Pair
Пара приватного/публичного ключей.
- может быть привязана к >= 0 аккаунтам
- может быть привязана к >= 0 кошелькам
Пара ключей создается командой eosc create key
. После создания эти ключи не привязаны ни к какому-либо кошельку ни к аккаунту. Привязку необходимо осуществить явно, выполнив соответствующую команду.
Wallet
Кошелек, хранящий ключи. Напрямую с аккаунтами не взаимдействует, но содержит в себе ключи, которые могут принадлежать существующим аккаунтам. Имеет 0 или более импортированных ключей. Импортировать ключ можно командой:
eosc wallet import PRIVATE_KEY
Не забываем, что после перезагрузки демона eosd
кошелек, используемый eosc
закрывается и его необходимо заново открыть, а в некоторых случаях и разлочить. Далее приведен пример этих операций для кошелька default. Если используется другой кошелек, его необходимо указать после операций open
или unlock
:
eosc wallet open
eosc wallet unlock
Contract
По умолчанию аккаунт не содержит какого либо смарт-контракта, но его можно явно назначить:
eosc set contract account4mycontract my_contract.wast my_contract.abi
Этот код назначает скомпилированный WAST файл с интерфейсом ABI смарт-контрактом для аккаунта account4mycontract. Проверить, привязан ли какой смарт-контракт к аккаунту можно следующим способом:
eosc get code account4mycountract
Message
Сообщения в сети EOS используются для коммуникации между аккаунтами.
Смарт-контракт слушает входящие сообщения и обрабатывает их с помощью функции apply. Отправка сообщений контрактом возможно с помощью класса eosio::message.
Отправить сообщение из консоли можно с помощью
eosc push message
Transaction
Транзакция в сети EOS содержит в себе список сообщений, которые необходимо применить. Принадлежит определенному блоку. Отправить одну или несколько транзакций можно как из смарт-контракта так и из консоли следующими командами:
eosc push transaction
eosc push transactions
Есть и другие
Хочу обратить внимание, что мы не рассматриваем здесь все сущности, которые присутствуют так или иначе в программном обеспечении EOS. В следующих постах явно будет рассмотрена работа с такими сущностями как Permissions
и Table
.