Распределенной системы, реализующее очень простую концепцию блокчейна

Цена договорная • наличный расчёт, безналичный расчёт, электронные деньги
14 декабря 2018, 20:37 • 5 откликов • 72 просмотра
Ваша задача - разработать приложение распределенной системы, реализующее очень простую концепцию блокчейна. Для реализации используйте любую технологию по вашему предпочтению (C / C ++, Java, .NET, Python, JavaScript и т. Д.), А для связи между партнерами используйте HTTP REST или RPC / RMI-подобные подходы. Создайте проект Git ds-2018 в репозитории KPI GitLab и сохраните там свое решение.

Blockchain



Структура блокчейна очень простым способом Основная идея блокчейна очень проста: это распределенная база данных, которая обрабатывает постоянно растущий список упорядоченных записей. Не думайте о блокчейне с точки зрения криптовалюты и / или бизнес-транзакций. Мы будем использовать блокчейн для хранения некоторых пользовательских данных в неизменяемом распределенном списке (цепочке) в одноранговой сети узлов.

Разработайте блочную структуру, подходящую для решения блокчейна. Данные в блоке хэшируются (используется хэш-функция SHA-256), и блок связывается друг с другом путем сохранения хеша предыдущего блока. Блок состоит из индекса, отметки времени, данных (любые пользовательские данные, которые будут сохранены в блоке), хеша предыдущего блока и хеша текущего блока (который вычисляется из всех других данных блока). Блоки должны быть сохранены либо в файл, либо в базу данных, чтобы узел мог восстановиться после перезапуска.

Одноранговая сеть для распространения блокчейна

Любой узел одноранговой сети может генерировать новый блок, который добавляется в цепочку блоков узла. Сгенерированный блок затем транслируется всем другим одноранговым узлам, и они несут ответственность за добавление блока в свои собственные цепочки блоков. Целостность дополнения блока к блокчейну должна быть проверена. Мы не будем использовать настоящее «майнинг» (мы не будем реализовывать протоколы Proof-of-Work или Proof-of-Stake ). Единственная проверка целостности - это длина цепочки блоков, достоверность связанного хеша с предыдущим блоком и достоверность вычисленного хеша сгенерированного блока. Это должно гарантировать, что все узлы в конечном итоге будут содержать один и тот же блокчейн. Хэши гарантируют неизменность цепи. (Если честно, такую цепочку можно изменить, но это очень сложно.)

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

  • Когда узел генерирует новый блок, он передает его другим узлам.
  • Когда узел подключается к новому узлу, он запрашивает последний блок.
  • Когда узел встречает блок, индекс которого больше текущего известного блока, он либо добавляет блок в свою текущую цепочку блоков, либо запрашивает полную цепочку блоков. (Это означает, что самый длинный блокчейн является победителем.)
Помимо предлагаемого протокола: предлагаемый очень простой протокол не может гарантировать порядок генерируемых блоков, и скоро или поздно будут разные цепочки блоков в разных узлах. Хорошо подумайте, как гарантировать порядок одновременной генерации блоков в сети (например, в предложенный протокол может быть добавлена общая схема отметок времени). Лучшее (или любое) решение будет дополнительно награждено :-)

(Как правило, это не реальная проблема, чтобы действовать без упорядочения, потому что все цепочки блоков все еще действительны. Единственное последствие - некоторые данные доступны только в некоторых узлах.)

Пользовательский интерфейс Разработка простого пользовательского интерфейса, который позволяет пользователю выполнять следующие действия с узлом:

  • Список блокчейн узла.
  • Создать новый блок с заданными данными.
  • Перечислите все одноранговые узлы в одноранговой сети.
  • Добавьте новый одноранговый узел в одноранговую сеть.
Используйте любую технологию по вашему выбору (консоль, Интернет и т. Д.) Для реализации пользовательского интерфейса.