Как подключить пользователя Android-приложения к сети ethereum?

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

Я читал о концепции light-clientsи full-nodesузнал, что официальный легкий клиент Ethereum все еще находится в стадии разработки.

Потом я наткнулся на эти статьи об использовании эфириума в Android и Iphone . Поэтому они как бы предложили создать Full-Ethereumузел и заставить ваше приложение взаимодействовать с этим узлом, используя файлы JSON-RPC protocol. Поэтому я придумал следующую архитектуру:

Приложение для Android (содержит закрытый ключ и данные пользователя) ----> Сервер полного узла Ethereum (настройка с использованием доступных клиентов для ethereum (на питоне)) -----> Виртуальная машина Ethereum.

У меня есть несколько вопросов следующего содержания:

  1. Безопасна ли приведенная выше архитектура? (Что произойдет, если сервер скомпрометирован или сервер предвзят)

  2. Нужно ли мне создавать клиент Ethereum с полным узлом, соответствующий каждому пользователю приложения Android.

  3. Какой тип пользовательских данных потребуется серверу полного узла для обработки транзакции от его имени?

Последнее немного вырвано из контекста и может быть очень расплывчатым. Учитывая библиотеку JSON-RPC, такую ​​как [web3j][3], и клиент с полным узлом, такой как [pyethapp][4], работающий на другом устройстве. Как бы я сделал web3jвзаимодействовать сpyethapp

Привет. Вы можете проверить этот пост в блоге. web3j.github.io/web3j/infura.html Отказ от ответственности: я основатель INFURA.
@HermanJunge Можно ли использовать testrpcвместо Infura? Потому что у меня нет эфиров для тестирования в реальной сети.
И можем ли мы подключить мой удаленный клиент ethereum к приложению Android, используя web3j и такой сервис, как ngrok?
Подумайте о том, чтобы изучить мобильное приложение Status; в настоящее время выпускается здесь: status.im

Ответы (1)

  1. Безопасна ли приведенная выше архитектура? (Что произойдет, если сервер скомпрометирован или сервер предвзят)

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

  1. Нужно ли мне создавать клиент Ethereum с полным узлом, соответствующий каждому пользователю приложения Android.

Нет

  1. Какой тип пользовательских данных потребуется серверу полного узла для обработки транзакции от его имени?

Нет, при условии, что все транзакции должным образом подписаны перед отправкой

Чтобы взаимодействовать с удаленным узлом, вы можете просто указать IP-адрес и порт для web3.js следующим образом:

web3.setProvider(new web3.providers.HttpProvider('http://ipaddress:port'));