В этом руководстве мы создадим небольшое распределенное приложение (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 ObservablemessageObservables = 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(FunctionchatBotAlgorithm) { // 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(FunctionchatBotAlgorithm) 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”