Рубрики
Без рубрики

Введение в Ethereum

Узнайте о библиотеке Ethereum, которая позволяет нам взаимодействовать с блокчейном Ethereum, используя Java.

Автор оригинала: baeldung.

1. введение

В этой статье мы рассмотрим библиотеку Ethereum , которая позволяет нам взаимодействовать с блокчейном Ethereum , используя Java.

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

2. Об Эфириуме

Ethereum – это криптовалюта , использующая распределенную одноранговую базу данных в виде программируемой блокчейн виртуальной машины Ethereum (EVM). Он синхронизирован и управляется через разрозненные, но связанные узлы .

По состоянию на 2017 год/| Узлы синхронизируют блокчейн через консенсус, создают монеты с помощью майнинга ( доказательство работы ), проверяют транзакции, выполняют смарт-контракты , написанные в Солидности , и запускают EVM.

Блокчейн разделен на блоки , которые содержат состояния счетов (включая транзакции между счетами ) и подтверждение работы .

3. Фасад Эфириума

Фасад org.ethereum.Класс Ethereum абстрагирует и объединяет множество пакетов Ethereum в один простой в использовании интерфейс.

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

Создание объекта фасада так же просто, как:

Ethereum ethereum = EthereumFactory.createEthereum();

4. Подключение к сети Ethereum

Чтобы подключиться к сети, мы должны сначала подключиться к узлу , т. е. серверу, на котором работает официальный клиент. Узлы представлены классом org.ethereum.net.rlpx.Node .

Слушатель org.ethereum.Адаптер прослушивателя Ethereum обрабатывает события блокчейна, обнаруженные нашим клиентом после успешного подключения к узлу.

4.1. Подключение к сети Ethereum

Давайте подключимся к узлу в сети. Это можно сделать вручную:

String ip = "http://localhost";
int port = 8345;
String nodeId = "a4de274d3a159e10c2c9a68c326511236381b84c9ec...";

ethereum.connect(ip, port, nodeId);

Подключение к сети также может быть выполнено автоматически с помощью компонента:

public class EthBean {
    private Ethereum ethereum;

    public void start() {
        ethereum = EthereumFactory.createEthereum();
        ethereum.addListener(new EthListener(ethereum));
    }

    public Block getBestBlock() {
        return ethereum.getBlockchain().getBestBlock();
    }

    public BigInteger getTotalDifficulty() {
        return ethereum.getBlockchain().getTotalDifficulty();
    }
}

Затем мы можем ввести наш EthBean в конфигурацию нашего приложения. Затем он автоматически подключается к сети Ethereum и начинает загрузку блокчейна.

На самом деле, большая часть обработки соединений удобно обернута и абстрагирована простым добавлением org.ethereum.listener.EthereumListenerAdapter экземпляр для нашего созданного org.ethereum.facade.Ethereum экземпляр, как мы сделали в нашем методе start() выше:

EthBean eBean = new EthBean();
Executors.newSingleThreadExecutor().submit(eBean::start);

4.2. Обработка Блокчейна с помощью Прослушивателя

Мы также можем подкласс Адаптер прослушивателя Ethereum для обработки событий блокчейна, обнаруженных нашим клиентом.

Чтобы выполнить этот шаг, нам нужно будет сделать наш подклассный слушатель:

public class EthListener extends EthereumListenerAdapter {
    
    private void out(String t) {
        l.info(t);
    }

    //...

    @Override
    public void onBlock(Block block, List receipts) {
        if (syncDone) {
            out("Net hash rate: " + calcNetHashRate(block));
            out("Block difficulty: " + block.getDifficultyBI().toString());
            out("Block transactions: " + block.getTransactionsList().toString());
            out("Best block (last block): " + ethereum
              .getBlockchain()
              .getBestBlock().toString());
            out("Total difficulty: " + ethereum
              .getBlockchain()
              .getTotalDifficulty().toString());
        }
    }

    @Override
    public void onSyncDone(SyncState state) {
        out("onSyncDone " + state);
        if (!syncDone) {
            out(" ** SYNC DONE ** ");
            syncDone = true;
        }
    }
}

Метод on Block() запускается на любом новом полученном блоке (старом или текущем). EthereumJ представляет и обрабатывает блоки с помощью org.ethereum.core.Блок класс.

Метод onSyncDone() срабатывает после завершения синхронизации, обновляя наши локальные данные Ethereum.

5. Работа с Блокчейном

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

5.1. Отправка транзакции

Теперь, когда мы подключились к блокчейну, мы можем отправить транзакцию. Отправка Транзакции относительно проста, но создание фактической Транзакции само по себе является длительной темой:

ethereum.submitTransaction(new Transaction(new byte[]));

5.2. Доступ к объекту Блокчейн

Метод getBlockchain () возвращает объект Blockchain facade с геттерами для извлечения текущих сетевых проблем и конкретных Блоки .

Поскольку мы настроили наш EthereumListener в разделе 4.3, мы можем получить доступ к блокчейну, используя описанный выше метод:

ethereum.getBlockchain();

5.3. Возврат адреса учетной записи Ethereum

Мы также можем вернуть адрес Ethereum .

Чтобы получить учетную запись Ethereum нам сначала нужно аутентифицировать пару открытых и закрытых ключей в блокчейне.

Давайте создадим новый ключ с новой случайной парой ключей:

org.ethereum.crypto.ECKey key = new ECKey();

И давайте создадим ключ из данного закрытого ключа:

org.ethereum.crypto.ECKey key = ECKey.fromPivate(privKey);

Затем мы можем использовать наш ключ для инициализации учетной записи /. Вызывая .init() мы устанавливаем как ECKey , так и связанный Адрес на объекте Account :

org.ethereum.core.Account account = new Account();
account.init(key);

6. Другие Функциональные возможности

Есть еще две основные функции, предусмотренные фреймворком, которые мы здесь не будем рассматривать, но о которых стоит упомянуть.

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

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

Более продвинутые темы, касающиеся самого Эфириума, можно найти в официальном docs .

7. Заключение

В этом кратком руководстве мы показали, как подключиться к сети Ethereum и несколько важных методов работы с блокчейном.

Как всегда, код, используемый в этом примере, можно найти на GitHub .