Автор: ZhdanoffAlexey
Данная статья будет посвящена одной из ключевых функций распределенного реестра Hedera Hashgraph – загрузке разработанных на Solidity смарт-контрактов.
Данный распределённый реестр использует технологию DAG (Направленного Ациклического Графа). Данная технология уже находила своё применение в машинном обучении (байесовская сеть доверия), в компиляторах, в статистике. Таким образом, данные в сети хранятся не в блоках, они распределены по т.н. событиям (events).
DAG по-прежнему решают задачу византийских генералов. Как правило, каждый проект, разрабатывающий распределённый реестр подобного рода, имеет свой подход к синхронизации узлов, т.е. собственный консенсус.
Каждый из валидаторов собирает свои транзакции, выбирает произвольным образом другого участника и направляет ему данные о своих транзакциях, а также информацию, которую сообщили ему другие узлы, когда подключались к нему. Итак, функционирование очень простое: валидатор «слушает», принимает все сообщения, которые приходят к нему, а после этого произвольным образом выбирает другого участника и отправляет ему все транзакции вместе со своими. Hashgraph гарантирует, что за конечное число шагов, то есть раундов работы протокола, все узлы приходят к единому решению. Протокол работает достаточно быстро и хорошо масштабируется.
Кроме того, в сети отсутствует лидер, что позволяет злоумышленнику выводить из строя узлы. Пока сохраняется 2/3 честных пользователей, протокол обеспечивает высокий уровень безопасности. Для синхронизации узлов и приходу их к договорённости между собой так же происходит обмен между участниками сети в случайном порядке.
Под руководством Dr. Leemon Baird разрабатывается публичная сеть Hedera Hashgraph, используящая одноимённый протокол. Данная платформа в своём функционале будет иметь файловые сервисы, криптовалюты и смарт-контракты.
На момент марта 2019 года уже был проведён краудсейл. Внутренняя криптовалюта сети HBar оценивается в $0.12. Здесь можно ознакомиться с состоянием сети. На данный момент доступны Mainnet и Testnet, интересующие нас смарт-контракты доступны на данный момент только в тестовой сети.
Необходимо пройти регистрацию на портале и подтверждение личности. Важно! Регистрация на портале возможна в рамках этапа тестирования. На момент создания статьи сообщество в ожидании второго этапа тестирования, и регистрация в портале временно недоступна. Инструкция по регистрации и прохождению KYC по ссылке
Выберем сеть для дальнейшей работы. Функция смарт-контрактов на данный момент доступна только на тестовой сети, поэтому выбираем testnet.
Портал запросит у нас код доступа к сети, который можно получить на почту по оставленной заявке на странице.
Введём ключ, который будет нами получен в сообщении по почте, Hedera выдаст следующую информацию:
Эти данные нам понадобятся в дальнейшем.
Загружаем с github генератор ключей и запускаем его командой
java -jar hedera-sdk-keygen-1.2-run.jar
Получим:
В рамках проекта был разработал ряд инструментариев разработчиков (SDK) с API для создания децентрализованных приложений под платформу. Hedera на данный момент поддерживает официально SDK на языке JAVA. Поддержкой библиотек на языках Rust, C, GO, Python занимается проект Launchbadge.
Рассмотрим деплой контрактов на примере Java SDK
Приступим к деплою смарт-контракта, рассмотрим процесс на примере уже имеющегося контракта “HelloWorld”.
Отредактируем examples\node.properties.sample
. Укажем в нём данные, которые мы видели на странице портала.
В examples\src\main\resources\scExamples
рассмотрим следующие файлы
HelloWorld.sol
- код смарт-контракта на Solidity, для ознакомленияHelloWorld.info.txt
- содержит ABI нашего контракта, аналогично предоставлен в качестве примерHelloWorld.bin
- файл с байт-кодом скомпилированного контракта, нужен всегда, далее на этот файл будем ссылаться.
Код смарт-контракта:
pragma solidity ^0.5.3;
contract HelloWorld {
function getInt () public pure returns (uint) {
return 42;
}
function getString () public pure returns (string memory) {
return "John says hi";
}
}
Далее ничего делать не потребуется, только рассмотрим код исполняемого файла \examples\src\main\java\com\hedera\examples\simple\DemoContractHelloWorld.java
Именно с помощью него мы будем загружать контракт в сеть и вызывать из контракта методы.
В данной строке читается бинарный код контракта
Далее ниже прописаны два метода, которые мы будем вызывать. Обратите внимание, что в константах указывается однострочный ABI смарт-контракта.
Запустим рассматриваемый данный исполняемый файл и получим ответ:
Изображения https://medium.com/coinmonks/dag-will-overcome-blockchain-problems-dag-vs-blockchain-9ca302651122