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

Клиентская библиотека Radix Java – начало работы

Введение В этом руководстве мы создадим небольшое распределенное приложение (DApp) с нуля… С тегами blockchain, java, bot, dlt.

В этом руководстве мы создадим небольшое распределенное приложение (App) с нуля, используя клиентскую библиотеку Java . Методы, которые вы изучите в этом руководстве, являются основополагающими для создания любого приложения на Radix , и освоение их даст вам лучшее понимание распределенной бухгалтерской книги Radix.

В качестве примера приложения для этого руководства мы создадим простого чат-бота, который получает и отвечает на сообщения, отправленные на определенный базовый адрес. С помощью нашего небольшого приложения для чат-бота вы научитесь:

-Загрузка и подключение к распределенной бухгалтерской книге Radix -Создание идентификатора Radix -Создание адреса Radix на основе этого идентификатора -Отправка и получение зашифрованных сообщений на другие адреса Radix

Не волнуйтесь, если вы новичок в концепциях Radix, так как по пути мы рассмотрим основные строительные блоки.

Наш первый шаг – настроить вас, чтобы вы могли начать создавать свое первое Java DApp с помощью Radix.

Вы можете установить библиотеку radixdlt-java с помощью gradle:

repositories {
    maven { url 'https://jitpack.io' }
}
implementation 'com.radixdlt:radixdlt-java:0.9.3'

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

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

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

Теперь, когда вы настроены, не стесняйтесь ознакомиться с нашим глоссарием, чтобы мы могли найти общий язык:

ВселеннаяОсколкиУзлы -/| Атомы Учетная запись Адрес Идентификационный номер

Теперь, когда мы сделали краткий обзор концепций, лежащих в основе Radix, и у нас есть общий язык, мы готовы приступить к созданию нашего примера чат-бота DApp с использованием библиотеки radixdlt-java .

Первый шаг, прежде чем мы сможем взаимодействовать с бухгалтерской книгой, – это выбрать, какой Вселенная к которой мы хотим подключиться. В этом случае мы будем использовать конфигурацию ALPHABET universe, поскольку это наша основная среда тестирования.

Мы начинаем с создания класса чат-бота и инициализации подключения к Вселенной Radix с помощью метода Radix Universe.bootstrap() :

import com.radixdlt.client.core.RadixUniverse;

public class ChatBot {
    static {
        RadixUniverse.bootstrap(Bootstrap.ALPHANET);
    }

    public ChatBot() {
    }
}

Далее нам нужно сгенерировать идентификатор Radix , который будет обрабатывать логику закрытого/открытого ключа от имени чат-бота. Мы делаем это, вызывая конструктор Simple Radix Identity() :

public class ChatBot {
    static {
        RadixUniverse.bootstrap(Bootstrap.ALPHANET);
    }

    public ChatBot() throws IOException {
        // Load Identity
        final RadixIdentity chatBotIdentity = new SimpleRadixIdentity("chatbot.key");
    }
}

Примечание: чат-бот.ключ файл – это место, где будет сохранен и загружен закрытый ключ.

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

public class ChatBot {
    static {
        RadixUniverse.bootstrap(Bootstrap.ALPHANET);
    }

    private final RadixAddress address;

    public ChatBot() throws IOException {
        // Load Identity
        final RadixIdentity chatBotIdentity = new SimpleRadixIdentity("chatbot.key");
        final ECPublicKey publicKey = chatBotIdentity.getPublicKey();
        this.address = RadixUniverse.getInstance().getAddressFrom(publicKey);
    }
}

Как только мы создадим адрес для чат-бота, мы сможем начать получать сообщения. Чтобы получить сообщение, нам нужно:

-Инициализируйте модуль обмена сообщениями Radix -Подпишите слушателя на наш адрес -Расшифруйте каждое сообщение (используя нашу идентификацию) -Печать каждое сообщение, которое мы получаем

public class ChatBot {
    static {
        RadixUniverse.bootstrap(Bootstrap.ALPHANET);
    }

    private final RadixAddress address;

    public ChatBot() throws IOException {
        // Load Identity
        final RadixIdentity chatBotIdentity = new SimpleRadixIdentity("chatbot.key");
        final ECPublicKey publicKey = chatBotIdentity.getPublicKey();
        this.address = RadixUniverse.getInstance().getAddressFrom(publicKey);

        // Subscribe/Decrypt messages
        final Observable messageObservables = RadixMessaging.getInstance()
            .getAllMessagesDecrypted(chatBotIdentity);

        // Print messages
        messageObservables.subscribe(System.out::println);
    }
}

Теперь, когда чат-бот может получать сообщения, мы можем заставить бота ответить, отправив сообщение обратно отправителю. Мы делаем это следующим образом: Подписываем другого слушателя на наши сообщения, фильтрующие адреса (чтобы мы не отвечали на наши собственные сообщения) Создание и отправка зашифрованного эхо-сообщения исходному отправителю

public class ChatBot {
    static {
        RadixUniverse.bootstrap(Bootstrap.ALPHANET);
    }

    private final RadixAddress address;

    public ChatBot(Function chatBotAlgorithm) {
        // Load Identity
        final RadixIdentity chatBotIdentity = new SimpleRadixIdentity("chatbot.key");
        final ECPublicKey publicKey = chatBotIdentity.getPublicKey();
        this.address = RadixUniverse.getInstance().getAddressFrom(publicKey);

        // Subscribe/Decrypt messages
        final Observable messageObservables = RadixMessaging.getInstance()
                                                                    .getAllMessagesDecrypted(chatBotIdentity);

        // Print messages
        messageObservables.subscribe(System.out::println);

        // Chatbot replies
        messageObservables
            .filter(message -> !message.getFrom().equals(address)) // Don't reply to ourselves!
            .filter(message -> Math.abs(message.getTimestamp() - System.currentTimeMillis()) < 60000) // Only reply to recent messages
            .subscribe(message ->
                RadixMessaging.getInstance()
                    .sendMessage(chatBotAlgorithm.apply(message.getContent()), chatBotIdentity, message.getFrom());
    }
}

На данный момент у нас есть все основные строительные блоки для нашего простого приложения чат-бота. Теперь, чтобы иметь полное и функциональное приложение DApp, давайте добавим несколько последних штрихов:

-Используйте Функцию<Строка,Строка> для представления алгоритма чат-бота, чтобы сделать его легко расширяемым – Строить метод main для запуска и тестирования путем отправки сообщения на его адрес

import com.radixdlt.client.core.Bootstrap;
import com.radixdlt.client.core.RadixUniverse;
import com.radixdlt.client.core.address.RadixAddress;
import com.radixdlt.client.core.crypto.ECPublicKey;
import com.radixdlt.client.core.identity.OneTimeUseIdentity;
import com.radixdlt.client.core.identity.RadixIdentity;
import com.radixdlt.client.core.identity.SimpleRadixIdentity;
import com.radixdlt.client.core.network.AtomSubmissionUpdate;
import com.radixdlt.client.messaging.RadixMessage;
import com.radixdlt.client.messaging.RadixMessaging;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import java.util.function.Function;

public class ChatBot {
    static {
        RadixUniverse.bootstrap(Bootstrap.ALPHANET);
    }

    private final RadixAddress address;

    public ChatBot(Function chatBotAlgorithm) throws Exception {
        // Load Identity
        final RadixIdentity chatBotIdentity = new SimpleRadixIdentity("chatbot.key");
        final ECPublicKey publicKey = chatBotIdentity.getPublicKey();
        this.address = RadixUniverse.getInstance().getAddressFrom(publicKey);

        // Subscribe/Decrypt messages
        final Observable messageObservables = RadixMessaging.getInstance()
            .getAllMessagesDecrypted(chatBotIdentity);

        // Print messages
        messageObservables.subscribe(System.out::println);

        // Chatbot replies
        messageObservables
            .filter(message -> !message.getFrom().equals(address)) // Don't reply to ourselves!
            .filter(message -> Math.abs(message.getTimestamp() - System.currentTimeMillis()) < 60000) // Only reply to recent messages
            .flatMap((io.reactivex.functions.Function>) message ->
                RadixMessaging.getInstance().sendMessage(chatBotAlgorithm.apply(message.getContent() + " from Bot!"), chatBotIdentity, message.getFrom())
            ).subscribe(System.out::println, Throwable::printStackTrace);
    }

    public static void main(String[] args) throws Exception {
        ChatBot chatBot = new ChatBot(Function.identity());
        System.out.println("Chatbot address: " + chatBot.address);

        // Send message to bot
        RadixIdentity oneTimeUseIdentity = new OneTimeUseIdentity();
        RadixMessaging.getInstance()
            .sendMessage("Hello World", oneTimeUseIdentity, chatBot.address)
            .subscribe(System.out::println);
    }
}

Выполнение этого приведет к получению результатов, подобных этому:

Chatbot address: JGX2vijpLPBqTbtbznT81MGM7vVSDNDT95xHuChVdHnGzk9vBie
JGePib7zXBWa4ExNkpCmMbfkNy8H6UP351gMsdoYMgsrGUC43aB -> JGX2vijpLPBqTbtbznT81MGM7vVSDNDT95xHuChVdHnGzk9vBie: Hello World
JGX2vijpLPBqTbtbznT81MGM7vVSDNDT95xHuChVdHnGzk9vBie -> JGePib7zXBWa4ExNkpCmMbfkNy8H6UP351gMsdoYMgsrGUC43aB: Hello World from Bot!

Поздравляю! Теперь вы создали чат-бота, подключенного к сети Radix.

Telegram для общего чата ​Discord для чата разработчиков Reddit для общего обсуждения Форум для технического обсуждения ​ Твиттер для объявлений Электронная почта рассылка новостей для еженедельных обновлений Отправить по электронной почте hello@radixdlt.com для общих запросов

Оригинал: “https://dev.to/radixdlt/the-radix-java-client-library-getting-started-5426”