Bitcoin Forum

Local => Кодеры => Topic started by: UncleAndy on April 21, 2015, 05:35:39 PM



Title: Распространение данных в p2p сети
Post by: UncleAndy on April 21, 2015, 05:35:39 PM
Всем привет!

Недавно только заинтересовался внутренностями протокола биткоин и никак не могу найти ответ на вопрос - как распространяется неподтвержденная транзакция в сети биткоин? Т.е. с помощью какой технологии? Узлы просто скачивают списки адресов с других узлов и рассылают новые транзакции по ним?

Аналогично - как распространяются замайненные блоки? Через ту-же сеть или для них есть отдельная?


Title: Re: Распространение данных в p2p сети
Post by: awoland on April 22, 2015, 07:53:49 AM
Узел, инициирующий транзакцию, рассылает её своим пирам. А уже эти пиры рассылают далее - другим.
Каждый узел (пир) принимает транзакции из сети и сверяет на соответствие (наличие) с локальным пулом неподтверждённых транзакций. Если правильная (по всем остальным параметрам) транзакция отсутствует в локальном пуле, она заноситься в этот пул и рассылается далее. Если транзакция не проходит проверку на валидность она отбрасывается, а узел активно и систематически рассылающий такие транзакции попадает в чёрный список и далее транзакции от этого узла игнорируются (бан).


Title: Re: Распространение данных в p2p сети
Post by: UncleAndy on April 22, 2015, 10:03:43 AM
Спасибо за понятный ответ! :)

А пиры, как я понимаю, формируются через обмен пирами между разными клиентами и специальным IRC? А в каком порядке идут проверки? Сначала на IRC или сначала на 8 базовых (зашитых в клиенте) пиров?

Да... И еще - для чего используется локальный пул неподтвержденных транзакций? Я так понимаю, что если транзакция относится к текущему узлу, тут все ясно - показывается неподтвержденное перечисление. Если текущий узел занимается майнингом, он включает транзакции в свой блок (кстати, как он при этом выбирает какие именно транзакции включать в блок?). А что в этом пуле неподтвержденных транзакций происходит на обычном узле, к которому эти транзакции не относятся? Они все всегда на нем хранятся? Или хранятся только до момента подтверждения, а потом стираются?


Title: Re: Распространение данных в p2p сети
Post by: amaclin on April 22, 2015, 04:35:46 PM
Да... И еще - для чего используется локальный пул неподтвержденных транзакций?
Потому что каждый узел вообще говоря обязан проверять корректность транзакций и не пересылать ничего лишнего.
То есть у тебя, допустим, 8 пиров.
Получаешь от одного из них транзакцию, которая до этого была неизвестна тебе.
Сохраняешь её у себя в пуле и остальным 7 своим пирам говоришь, что у тебя есть новая транзакция.
Они могут у тебя её запросить. А могут и не запросить, если уже получили другим способом

По идее никто не требует, чтобы твой пул неподтвержденных транзакций был бы какого-то конкретного размера.
Можешь не хранить ничего. И другим не пересылать. Никто не запрещает в принципе.
Колхоз - дело добровольное.

Quote
Если текущий узел занимается майнингом, он включает транзакции в свой блок (кстати, как он при этом выбирает какие именно транзакции включать в блок?).
Как хочет, так и выбирает. Никаких ограничений на комплектность, за исключением формальных правил типа того что если транзакция B тратит выходы транзакции A то нельзя включать в блок транзакцию B если транзакция A не была включена до этого (в том числе и в данный блок).
Поэтому могут быть блоки из одной транзакции, а могут быть забитыми под завязку.
Как правило, майнеры сортируют транзакции по комиссиям в порядке убывания и включают в блок те, которые имеют комиссию выше заданной. Некоторые пулы задают 0.0001 за килобайт, некоторые 0.00001, некоторые еше меньше

Quote
Они все всегда на нем хранятся? Или хранятся только до момента подтверждения, а потом стираются?
Хранить все транзакции никто не будет.
Существуют транзакции, которые практически стопроцентно никто в блок не включит.
Ноды их и не хранят.
В общем правило такое - если ты принял транзакцию, она вроде как тебя устраивает - то ты сообщаешь своим пирам о ней и хранишь ее какое-то время чтобы они могли её у тебя попросить. Если ты не майнер - можешь дропать её через пять минут.
Конечно, если ты увидел транзакцию в блоке - то смело дропай её из мемори-пула - зачем лишнюю память занимать?



Title: Re: Распространение данных в p2p сети
Post by: UncleAndy on April 22, 2015, 05:14:29 PM
Понял. Спасибо! Я примерно так и подозревал.