Fluence Network — новая платформа для разработки одноранговых приложений.
Приложения могут быть разделены между несколькими одноранговыми узлами, которые взаимодействуют с помощью частиц. Это забавная штука!
Это организовано новым языком под названием Aqua.
Чтобы проиллюстрировать это, давайте посмотрим, что требуется для подключения браузеров с совместимыми с Ethereum кошельками, такими как MetaMask.
Аква
Сначала мы пишем код Aqua, чтобы определить интерфейс к нужным нам сервисам и то, как они будут взаимодействовать.
В этом примере мы будем выполнять методы службы под названием Ethereum на одном удаленном узле.
Если бы мы хотели сделать это на многих одноранговых узлах параллельно, все, что потребовалось бы, — это использовать par on вместо on при идентификации одноранговых узлов.
Составление Аква-кода
Компилятор Aqua компилирует Aqua в модуль JavaScript или Typescript. Модуль экспортирует 3 элемента:
Функция registerEthereum, используемая для регистрации кода, который будет выполняться на удаленных одноранговых узлах для выполнения функций Ethereum.
Асинхронные функции requestAccounts и getSignature, которые вызываются одноранговыми узлами клиента для выполнения функций Ethereum на удаленном узле.
Удаленный партнер JS
С Fluence у нас есть доступ ко всем возможностям библиотек JavaScript в одноранговой среде.
Для каждого метода службы, определенного в Aqua, мы создаем асинхронную функцию для объекта JS. Этот объект передается в качестве параметра в registerEthereum.
В реализации requestAccounts мы используем объект window.ethereum, предоставленный MetaMask, для запуска запроса учетных записей Ethereum клиента.
В getSignature мы используем ethers.js для взаимодействия с кошельком, чтобы подписать сообщение EIP-712.
Клиентский одноранговый JS
Код клиента для взаимодействия с удаленным кошельком Ethereum также прост.
Каждому узлу присваивается идентификатор при подключении к сети Fluence. Мы передаем идентификаторы клиентов удаленного узла вместе с параметрами в скомпилированные функции.
Пример использования: Off-Chain DAO-коммуникация
С помощью нескольких строк кода выше (плюс небольшой шаблон для создания пиров) у нас есть основа для приложения удаленного управления Ethereum.
Каждый член распределенной организации запускает приложение в своем браузере.
Когда от членов требуются подписи, метод getSignature может быть вызван на подключенных удаленных одноранговых узлах.
MetaMask появится для каждого из клиентов, и они могут подписать сообщение, подтверждающее согласие.
Сила сети Fluence
Допустим, мы хотели бы выполнить действие, когда от Клиентов получено заданное количество подписей, но мы больше не можем быть на связи.
Мы можем определить другую службу на центральном узле, которая собирает, проверяет и сохраняет подписанные сообщения.
В Aqua мы указываем сервису обращаться к каждому из пиров параллельно. Когда необходимые подписи будут получены, служба вызовет другой удаленный узел для выполнения действия.
Каждая из этих услуг может быть разработана и развернута разными организациями.
В этом сила Fluence Network. Это позволяет просто создавать сложные одноранговые приложения и выполнять их децентрализованно.
Дальнейшее исследование
Погрузитесь глубже во внутреннюю работу Ethereum Remote во Части 2 этой статьи.
Если этот простой пример вызвал у вас желание попробовать на деле…
Ознакомьтесь с демо-приложением Eth Remote.
Поиграйте с кодом в репозитории Eth Remote GitHub.
Узнайте больше о Fluence Network.
На GitHub также доступен урезанный репозиторий, содержащий только функции, описанные в этой статье.