Разработка смарт-контрактов в Ethereum - стр. 16
Контракт может получить доступ к данным, содержащимся в поле данных.
Как пример использования, если контракт функционирует как служба регистрации домена, тогда данные транзакции будут содержать домен и IP-адрес для его регистрации.
Контракт будет читать эти значения из данных сообщения и соответствующим образом размещать их в хранилище.
Контракты имеют возможность отправлять «сообщения» другим контрактам.
Эти сообщения – это виртуальные объекты, которые никогда не сериализуются и существуют только в среде исполнения Ethereum. Такое сообщение содержит информацию об отправителе сообщения, получателе сообщения, количество эфира для передачи вместе с сообщением, дополнительное поле данных и значение газа.
По сути, сообщение похоже на транзакцию, за исключением того, что она создается контрактом, а не внешним аккаунтом.
Как и транзакция, сообщение приводит к тому, что аккаунт получателя запускает свой код.
Таким образом, контракты могут иметь отношения с другими контрактами точно так же, как и внешние аккаунты.
Код в контрактах Ethereum пишется на низкоуровневом, основанном на стеке языке байт-кода, называемом кодом виртуальной машины Ethereum.
Код состоит из серии байтов, где каждый байт представляет операцию.
Для написания контрактов рекомендуется высокоуровневый язык Solidity, код которого затем компилируется в язык виртуальной машины Ethereum.
Виртуальная машина Ethereum при своем запуске оперирует глобальным состоянием, содержащим все аккаунты и включающим балансы и хранилища, транзакцией или сообщением, и кодом контракта.
И если транзакция добавляется в блок, выполнение кода, порожденное этой транзакцией, будет выполняться всеми узлами, теперь и в будущем, которые загружают и проверяют этот блок.
Поверх сети Ethereum создаются три типа приложений.
Первая категория – это финансовые приложения, предоставляющие пользователям способы заключения контрактов с использованием их денег.
Это включает в себя суб-валюты, финансовые деривативы, контракты хеджирования, сберегательные кошельки, и т. д.
Вторая категория – это полу-финансовые приложения, в которых задействованы деньги, но есть также не денежная сторона, например, оплата вычислительных задач.
Наконец, существуют такие приложения, как онлайн-голосование, которые не являются финансовыми.
Контракт сам по себе не является децентрализованным приложением.
Децентрализованное приложение состоим из комбинации контракта и графического интерфейса для использования этого контракта.
При этом интерфейс реализован как веб-страница HTML/CSS/JS со специальным Javascript API в виде библиотеки web3.js для работы с блок-цепочкой Ethereum.