Я работаю над разработкой децентрализованного приложения, которое требует, чтобы у каждого пользователя приложения для Android была отдельная учетная запись, содержащая информацию о его балансе эфира и другую информацию, специфичную для пользователя.
Я читал о концепции light-clients
и full-nodes
узнал, что официальный легкий клиент Ethereum все еще находится в стадии разработки.
Потом я наткнулся на эти статьи об использовании эфириума в Android и Iphone . Поэтому они как бы предложили создать Full-Ethereum
узел и заставить ваше приложение взаимодействовать с этим узлом, используя файлы JSON-RPC protocol
. Поэтому я придумал следующую архитектуру:
Приложение для Android (содержит закрытый ключ и данные пользователя) ----> Сервер полного узла Ethereum (настройка с использованием доступных клиентов для ethereum (на питоне)) -----> Виртуальная машина Ethereum.
У меня есть несколько вопросов следующего содержания:
Безопасна ли приведенная выше архитектура? (Что произойдет, если сервер скомпрометирован или сервер предвзят)
Нужно ли мне создавать клиент Ethereum с полным узлом, соответствующий каждому пользователю приложения Android.
Какой тип пользовательских данных потребуется серверу полного узла для обработки транзакции от его имени?
Последнее немного вырвано из контекста и может быть очень расплывчатым. Учитывая библиотеку JSON-RPC, такую как [web3j][3], и клиент с полным узлом, такой как [pyethapp][4], работающий на другом устройстве. Как бы я сделал web3j
взаимодействовать сpyethapp
- Безопасна ли приведенная выше архитектура? (Что произойдет, если сервер скомпрометирован или сервер предвзят)
При условии, что пользовательские ключи хранятся только локально на пользовательском устройстве, это довольно безопасная архитектура. Тем не менее, я могу представить себе возможный вектор атаки, когда трафик между вашими пользователями и вашим узлом скомпрометирован, и предоставляется неверная информация о состоянии сети, в результате чего ваши пользователи совершают необдуманные транзакции. Я не уверен, насколько вероятно это на самом деле для вашего приложения, но если это похоже на то, от чего вы должны защищаться, то использование вторичного источника правды может помочь.
- Нужно ли мне создавать клиент Ethereum с полным узлом, соответствующий каждому пользователю приложения Android.
Нет
- Какой тип пользовательских данных потребуется серверу полного узла для обработки транзакции от его имени?
Нет, при условии, что все транзакции должным образом подписаны перед отправкой
Чтобы взаимодействовать с удаленным узлом, вы можете просто указать IP-адрес и порт для web3.js следующим образом:
web3.setProvider(new web3.providers.HttpProvider('http://ipaddress:port'));
Герман Юнге
Сатвик
testrpc
вместо Infura? Потому что у меня нет эфиров для тестирования в реальной сети.Сатвик
CBobRobison