Смотрите, совершается транзакция A-B, после этого, совершается транзакция B-C, и так далее, есть цепочка транзакций a-b-c-d-e-f-g
В это же время где-то (в другом сегменте сети) происходит другая цепочка транзакций с тем же первым входом - a-m-n-v-x-z-k-u
После этого ноды этих подсетей находят друг друга и пытаются синхронизироваться, но обнаруживается, что первая транзакция цепочки - это двойная трата.
Уважаемый вижу не до конца поняли мою мысль. И так начнем, двойная трата - это попытка отправить 2-м и более пользователям деньги.
Вот пример:
Пусть у нас есть монета с хеш-адресом 17Qy623y1VF8atdkbKNUVE4S7pcmLP8Mcj
Вы как хозяин монеты создаете с разных устройств 2 транзакции вида
1. 17Qy623y1VF8atdkbKNUVE4S7pcmLP8Mcj потом [хеш-адрес получателя1] [ваша подпись] [номер устройства1] [подпись устройства1]
2. 17Qy623y1VF8atdkbKNUVE4S7pcmLP8Mcj потом [хеш-адрес получателя2] [ваша подпись] [номер устройства2] [подпись устройства2]
Т.е. Вы пытаетесь из одной монеты сделать две, это и называется двойная трата.
Теперь рассмотрим цепочки транзакций. Возьмем ваш пример:
a-b-c-d-e-f-g цепочка первого пользователя
a-m-n-v-x-z-k-u цепочка второго пользователя
Под транзакцией
а я понимая именно такой вид:
CVQy623y1VF8atdkbKNUVE4S7pcmLP8Mcj потом [хеш-адрес получателя] [ваша подпись] [номер устройства
A] [подпись устройства
A]
т.е. это транзакция именно устройства
АПод транзакцией
b я понимая именно такой вид:
89dy623y1VF8atdkbKNUVE4S7pcmLP8Mcj потом [хеш-адрес получателя] [ваша подпись] [номер устройства
B] [подпись устройства
B]
т.е. это транзакция именно устройства
Bи так далее...
В данном конкретном случае это означает, что у пользователя все цепочки от разных устройств и не имеют двойную трату. Если бы я не применил данное упрощение, здесь бы вообще никто ничего не понял.
Двойная трата исключается множественными этапами проверки сети, т.е. когда Вы получаете от пользователя цепочку его транзакций, то обязательно идет проверка и на двойную трату, если это есть, то такие транзакции исключается и пользователю высылается сообщение и прекращение связи.
Проверка идет двойная, в начале проверяется на двойную трату только его буфер транзакций, а потом уже идет проверка общей получившийся цепочки.
Сама цепочка - это фактически конечная версия последовательности транзакций в текущем строящемся блоке. Если такая транзакция встречается у другого пользователя, то это говорит не о двойной трате, а о том, что там другая последовательность и другое видение этого строящегося блока.
Весь консенсус формируется именно тогда когда находиться максимально длинная цепочка у практически всей сети и вот из её последовательности и начинают строиться блок.
Как взаимодействуют цепочки, опять вернемся к вашему примеру:
a-b-c-d-e-f-g цепочка первого пользователя
a-m-n-v-x-z-k-u цепочка второго пользователя
Вначале давайте найдем более длинную цепочку, она у пользователя2 и имеет 8 транзакций, в то время как у пользователя1 цепочка имеет только 7 транзакций. Итак в нашем случае мы будет проводить над цепочками операцию поглощение:
Берем цепочку пользователя1 и сравниваем на совпадения с цепочкой пользователя2, те что совпали удаляем. В данном случае наша цепочка стала b-c-d-e-f-g.
Теперь эту цепочку мы присоединяем к концу цепочки пользователя2, т.е.
a-m-n-v-x-z-k-u + b-c-d-e-f-g = a-m-n-v-x-z-k-u-b-c-d-e-f-g
Таким образом мы образовали консенсус для двух этих пользователей, т.к. создали совместную цепочку транзакций из буфера хранения транзакций пользователя1 и буфера хранения транзакций пользователя2 .
И вот такие операции происходят по всей сети. Без разницы откуда придет цепочка и её размеры, сеть после различных проверок создаст с ней консенсус.
Вы никак не хотите понять смысл POW. Этот алгоритм создаёт стоимость построения альтернативных цепочек экономически невыгодным. На этом и держится безопасность сети.
В PoS - она держится тоже на экономической невыгодности атаковать сеть, так как для этого надо иметь долю (то есть надо играть против себя).
У вас же просто НЕТ никакой защиты) на одном сервере можно поднять сколько угодно нод и делать с сетью что угодно.
Уважаемый я не строю блокчейн из цепочек, я из них только создаю консенсус, потом эти цепочки обрезаются и создается блок с транзакциями.
В нашем случае если человек немного, то обрежется для блока только первых пять транзакций, т.е.
[a-m-n-v-x] - только из них строим блок а остальные z-k-u-b-c-d-e-f-g остаются на следующий блок.
Теперь из этого блока мы вносим изменения в нашу таблицу (она и есть блокчейн), как только изменения провели и таблицу захешировали по принципу биткоина (хеш предыдущий версии и хеш текущий хешируем), то этот отработавший блок нам уже не нужен и его можно удалять.