Разместите свой проект бесплатно и начните получать предложения от фрилансеров-исполнителей уже спустя минуты после публикации!

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

истекло время актуальности


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

Blockchain


Структура блокчейна очень простым способом

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

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

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


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

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


  • Когда узел генерирует новый блок, он передает его другим узлам.

  • Когда узел подключается к новому узлу, он запрашивает последний блок.

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

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

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

Пользовательский интерфейс

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

  • Список блокчейн узла.

  • Создать новый блок с заданными данными.

  • Перечислите все одноранговые узлы в одноранговой сети.

  • Добавьте новый одноранговый узел в одноранговую сеть.

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


  • Если это в рамках курсача, то проще взять готовые исходники на гитхабе. Потому что разработка с нуля будет стоить денег

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


    Если нет вознаграждения майнеру (комиссии), то непонятно, как оградиться от троллей, которые просто ради прикола замусорят сеть левыми данными.


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