Техническая архитектура блокчейн-приложения

Допустим, я хочу создать приложение, которое не является полностью децентрализованным, на самом деле оно обслуживает API-интерфейсы Restful для внешнего интерфейса и использует частную цепочку блоков Эфириума в серверной части для обработки конфиденциальных данных и управления разрешениями пользователей. Я создаю для каждого пользователя при регистрации в моем бэкенде учетную запись ethereum, используя его пароль. Бэкэнд работает под управлением NodeJS Express и подключен к экземпляру web3. Всякий раз, когда пользователь хочет совершить действие, он должен ввести свой пароль, затем я использую этот пароль, чтобы разблокировать его учетную запись и отправить транзакцию (или это может быть звонок по контракту).

  1. Имеет ли смысл выступать в качестве промежуточного программного обеспечения между пользователем и приватным блокчейном? Я имею в виду, что с точки зрения дизайна Эфириума это обычная практика? Как пользователь должен знать об этой практике, если он не видит ничего, связанного с блокчейном, потому что вся работа выполняется за кулисами? Как пользователь может быть уверен в моей системе, что его пароль не будет раскрыт?

  2. Рекомендуется ли в таком случае использовать несколько узлов для этого частного блокчейна? Какую пользу он приносит с собой? Только ли высокая доступность и устранение центральной точки отказа?

1. нет, не делай этого... поверь мне в этом. 2. нет, если только вы не сотрудничаете с несколькими организациями, которые делают одно и то же, и все вы делаете это на общем согласованном блокчейне.
@OWADVL .. не могли бы вы дать немного больше информации об ответе на первый вопрос?

Ответы (2)

Прежде чем я попытаюсь ответить на ваши вопросы: есть определенные преимущества использования блокчейна и эфириума в частности. Эти преимущества:

  • Технология Blockchain помогает отслеживать вещи, используя свою уникальную валютную систему и «токены».
  • Технология блокчейн может предоставить неопровержимое доказательство целостности любых данных.
  • Смарт-контракты Ethereum могут предоставлять средства для прозрачных транзакций между автоматизированными объектами. юридические лица, которые регулируются «Кодексом законов».
  • Смарт-контракты Ethereum действительно создают своего рода автоматизированного дилера всех видов товаров (торговый автомат для всего).

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

Ваши вопросы :

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

2) Несколько узлов в случае частной сети не нужны. Вам может понадобиться использовать много узлов, если логика вашей системы требует фактического разделения решений между этими узлами. Что-то вроде узла для каждой страны или узла для каждой партии. Наличие большого количества узлов также может снизить нагрузку на ваше оборудование и повысить производительность и отказоустойчивость вашей системы.

Допустим, я хочу создать надежную систему лояльности для своих пользователей. Должен ли я создать токен ERC-20? Или в этом нет особой необходимости, так как я управляю логикой смарт-контракта.
Говоря о предоставлении пользователю возможности напрямую взаимодействовать с блокчейном, как это может быть вариантом с использованием мобильного приложения?
@abed Вы можете интегрировать службу, подобную метамаске, для вашего мобильного приложения (если они существуют)
На самом деле есть гет-клиент для ios и android, но никогда не пробовал.
@abed это, вероятно, не полный узел, может быть, легкий. сложно установить гет на мобильные устройства

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

В моей архитектуре закрытый ключ пользователя находится на клиенте, а данные пользователя регистрируются на сервере mongodb вместе с учетной записью пользователя в эфириуме. Всякий раз, когда запрашивается транзакция, клиент создает ее в блокчейне с использованием закрытого ключа пользователя (в мобильном приложении хранится в области хранения, в веб-приложении им управляет MetaMask) и, в случае успеха, регистрирует транзакцию в базу данных со ссылкой на хэш транзакции.

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

Итак, закрытый ключ пользователя хранится на мобильном телефоне и отправляется через REST API на ваш сервер каждый раз, когда пользователь хочет отправить транзакцию?
Точно нет. У нас есть мобильное приложение, которое хранит закрытый ключ на смартфоне и создает транзакцию в блокчейне без использования внутреннего сервера. После подтверждения транзакции в блокчейне мобильное приложение отправляет некоторые данные на внутренний сервер вместе с хэшем транзакции.
Хорошо, это звучит здорово, так что, если мобильное приложение имеет дело с частной цепочкой блоков, вовлекаете ли вы пользователя в процесс создания кошелька? Что, если он удалит приложение, а затем снова захочет войти в систему, как он сможет восстановить закрытый ключ?
@abed Да, в процессе регистрации пользователя приложение создает закрытый ключ. Затем пользователь должен сохранить начальное число из 12 слов, распечатать его или сохранить где-нибудь (GDrive?). Чтобы уменьшить беспорядок, если у вас есть более конкретные вопросы, напишите мне по электронной почте (адрес в профиле)