SemenMartynov / Software-Engineering-2022

Peter the Great St. Petersburg Polytechnic University: Software Engineering course 2022
MIT License
4 stars 1 forks source link

SharpChain #330

Closed Relfick closed 1 year ago

Relfick commented 1 year ago

Student, group: Rebik Roman, 3530901/90201 URL: https://github.com/Relfick/SharpChain Any comments: git-flow, C#

SemenMartynov commented 1 year ago

network_mode: "host" нужно убрать. Тогда можно будет отказаться от использования разных портов. Подобный способ управления образами, приведёт к сборке трёх разных докер-образов, а нам нужен один.

SemenMartynov commented 1 year ago

@Relfick ping

Relfick commented 1 year ago

Поправил

SemenMartynov commented 1 year ago

Смотрю лог нод:

sharpchain-node2-1  | Generated block: Block(index=9, prevHash=251b, Hash=cb91, Data=94kF, Nonce=284345, Timestamp=05/25/2023 06:11:40)
sharpchain-node1-1  | Generated block: Block(index=9, prevHash=2983, Hash=8fc6, Data=nHeq, Nonce=177584, Timestamp=05/25/2023 06:11:45)
sharpchain-node3-1  | Generated block: Block(index=9, prevHash=2983, Hash=0000, Data=zEK8, Nonce=436748, Timestamp=05/25/2023 06:11:45)
sharpchain-node2-1  | Generated block: Block(index=10, prevHash=cb91, Hash=c49d, Data=A8h8, Nonce=359355, Timestamp=05/25/2023 06:11:45)
sharpchain-node3-1  | Generated block: Block(index=10, prevHash=0000, Hash=1511, Data=FO4E, Nonce=1080441, Timestamp=05/25/2023 06:11:48)
sharpchain-node2-1  | Generated block: Block(index=11, prevHash=c49d, Hash=b70e, Data=Q7Ym, Nonce=1149025, Timestamp=05/25/2023 06:11:48)
sharpchain-node1-1  | Generated block: Block(index=10, prevHash=8fc6, Hash=2ce4, Data=5kCL, Nonce=57382, Timestamp=05/25/2023 06:11:51)

Получается, что каждая нода сгенерировала 9-й блок, а потом, не получив подтверждение от соседей, каждая приступила к генерации 10-го блока. И в итоге, у нас блокчейн распался на 3 минорити, верно?

Relfick commented 1 year ago

Механизм запросов полной цепи при попадании ноды в минорити реализован, возможно, следовало немного подождать.

SemenMartynov commented 1 year ago

Тут просто видно, что 10й блок был сгенерирован всеми тремя нодами так, что prevHash у всех разный. Как работает логика разрешения минорити в этом случае?

Relfick commented 1 year ago

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

image

SemenMartynov commented 1 year ago

Но это не корректно... Я могу искусственно намайнить огромное количество блоков, и засунуть туда любые транзакции которые захочу. Остальные ноды будут вынуждены принять это за правду только на основании того, что моя цепочка длиннее. Фактически, мы от распеределённой системы переходим к централизованной.

Relfick commented 1 year ago

Исправил. Добавил валидацию цепи после запроса. Теперь её длина - не единственный критерий правильности.

SemenMartynov commented 1 year ago

+