Author

Topic: версии клиентов (Read 644 times)

giv
sr. member
Activity: 254
Merit: 251
January 27, 2013, 04:03:36 AM
#5
Если вы внимательно посмотрите на мой скриншот здесь: https://bitcointalk.org/index.php?topic=138588.20, то увидите, что я так и делал - для своего пропатченного клиента ставил версию больше, чем у оригинального. Это нормально работало. Но сейчас я отказался от этой идеи. Изменение версии протокола хорошо, если ваш патч внедрен в основную ветку разработки, чтобы ВСЕ клиенты сети соответствовали принятой системе версионирования. Однако, если ваш патч еще не принят в основную ветку (или вы сами не хотите, чтоб он был принят), то манипулирование версиями может иметь непредсказуемые последствия. Простой пример: сейчас версия протокола 60002, для своей фичи вы выставляете версию, например, 100060002. После этого разработчики биткойна внедряют в протокол новую фичу и присваивают ему номер, например, 70003. Во всех стандартных клиентах появляется вот такой код:
Code:
if (nVersion >= 70003)
    DoSomething();
Клиент с вашим патчем будет соответствовать этому условию, однако, поддержки новой фичи еще в нем нет, а это непредсказуемое поведение. В лучшем случае ваш клиент забанят остальные клиенты за misbehavior. Поэтому в своем патче для i2p я отказался от идеи манипулирования версиями, буквально вчера я решил эту проблему немного другим способом, сегодня буду тестить.
sr. member
Activity: 462
Merit: 250
January 27, 2013, 03:36:14 AM
#4
адреса в I2P длинные и просто так в поле для IPv6 не влезут
В общем, да.
member
Activity: 61
Merit: 10
January 27, 2013, 01:03:31 AM
#3
Узел и так будет знать, из какой сети к нему подключаются.

тогда надо два протокола:
- один для IPv4/IPv6
- другой для I2P

потому что адреса в I2P длинные и просто так в поле для IPv6 не влезут

а где-то выше нужен будет дополнительный уровень абстракции
sr. member
Activity: 462
Merit: 250
January 27, 2013, 12:50:51 AM
#2
Что будет, если один из узлов сети будет иметь существенно отличающуюся версию?
Как отреагирует получатель такого сообщения, это надо смотреть исходник. На сегодняшний день протокол Bitcoin определяется его реализацией в оригинальном софте.

Например, можно ли доопределить протокол так, если число отрицательное, то клиент работает в I2P и адрес будет добавлен дополнительным полем?
Думаю, это не понадобится. Узел и так будет знать, из какой сети к нему подключаются.

И непонятно для чего (зачем). ведь получающая нода итак знает свой адрес...
Иногда не знает. Например, если на компе нет глобальных IP-адресов, но входящие соединения пробрасываются через маршрутизатор.
member
Activity: 61
Merit: 10
January 27, 2013, 12:27:33 AM
#1
Что будет, если один из узлов сети будет иметь существенно отличающуюся версию?

https://en.bitcoin.it/wiki/Protocol_specification#version

вот если здесь будет не 106, а например 0x00FF0006 ?

Это к тому, что можно использовать пару старших байтов под дополнительное поле фич.

Например, можно ли доопределить протокол так, если число отрицательное, то клиент работает в I2P и адрес будет добавлен дополнительным полем?



Вообще, такое впечатление, что адрес в протоколе используется только в этом единственном месте.
И непонятно для чего (зачем). ведь получающая нода итак знает свой адрес...

UPD:
нет, не в единственном, еще в сообщении addr
Jump to: