Previous Page
iv.

Bootstrapping

760.

A further area of anachronism was identified by Dr Wuille at Wuille1, [13-23] {C1/1/3} in the context of bootstrapping, which is the process by which a node connects to the peer-to-peer network {Wuille1, [14] {C1/1/4}}. It is convenient to take that topic in two parts:

760.1.

First, by looking at the way in which a node first connects to the peer-to-peer network.

760.2.

Second, by exploring how the Bitcoin Software then obtained the IP addresses of further nodes.

761.

The process for first connection went through three phases:

761.1.

IRC seeding: When the Bitcoin Software was first released, nodes would connect to an IRC channel on a particular IRC server (which was hardcoded into the software) to see which other nodes were in the channel. It then built a database of IP addresses {Wuille1, [15] {C1/1/4}}.

761.2.

Seeding from hard-coded IP addresses: The software was then updated by Satoshi in June 2010 so that in addition to being able to connect to a particular IRC server, the IP addresses of some Bitcoin nodes was hardcoded into the software itself {Wuille1, [16] {C1/1/4}}. That can be seen at {L6/182/4} where the 47 seed IP addresses are identified in hex.

761.3.

DNS seeding: In March 2011 Jeff Garzik (then one of the core developers) proposed DNS seeding in a pull request on GitHub {L7/205}. DNS seeding would mean that nodes connected to a DNS server. The DNS server would record a number of Bitcoin node IP addresses {Wuille1, [17] {C1/1/4}}. Gavin Andresen recommended Jeff Garzik’s proposal to Satoshi Nakamoto in March 2011 {L7/204.4}. Satoshi’s response does not suggest that he accepted that there was a need for the change {L7/204.7}. However, the code was introduced into version 0.3.21 of the codebase in April 2011 {L7/221/1} (see fourth bullet point: “A new method of finding bitcoin nodes to connect with, via DNS A records. Use the -dnsseed option to enable”). The Bitcoin Software was then updated in version 0.3.24 in July 2011 to make DNS seeding the default: {L7/343} at point C1 (“DNS seeding enabled by default”).

762.

The process for a new node to obtain the IP addresses of additional nodes once it had connected to the network (which was undertaken through a “getaddr” request) also went through a number of stages {Wuille1, [18] {C1/1/4}}:

762.1.

In the first release of the Bitcoin Software there was no limit on the number of IP addresses that a new node (a “receiving node”) could receive from a node receiving that request (a “sending node”).

762.2.

In November 2009 Satoshi Nakamoto changed the Bitcoin Software to ensure sending nodes would only send 1,000 addresses in any one message. If there were more than 1,000 addresses to send, then the sending node would have to send more than one message {see {L6/29/4} final lines: if (VInventoryToSend.size() >= 1000) {pto->PushMessage(“inv”, vInventoryToSend);vInventoryToSend.clear()}.

762.3.

In June 2010, Satoshi made a further change so that receiving nodes would not have to process more than 1,000 addresses at a time. Individual messages with more than 1,000 addresses would be rejected {see Wuille1, [19] {C1/1/5} and {L6/181/2}: “// receiver rejects addr messages larger than 1000”}. This brought the position of receiving nodes into line with that of sending nodes – and so assumed that sending nodes would have updated their software in line with the change in November 2009.

762.4.

In October 2010, Satoshi made a further change so that if a sending node knew of 2000 or fewer active addresses, it would send all of them (albeit in messages of up to 1000 addresses at a time). If it knew of more than 2000 active addresses it would use a random number generator to send on average 2000 of them (again 1000 addresses at a time) {see {L6/454/1} green code passages}. Later that month, that was revised from 2000 to 2500 {see {L6/456/4} green code passage halfway down the page in which 2000 is replaced with 2500 and Wuille1, [19] {C1/1/5}.

763.

This history of bootstrapping can be compared with another of Dr Wright’s reliance documents, namely {L3/184}, which purports to date from December 2008. That document contains a section at the foot of {L3/184/2} that refers to “Node discovery” and purports:

763.1.

to describe (at {L3/184/2}) the Bitcoin network finding nodes using DNS seeding (as well as other mechanisms), even though DNS seeding was not implemented until April 2011. Moreover, the note does not even refer to IRC seeding, which is the system originally introduced by Satoshi.

763.2.

to describe (at {L3/184/3}) the 1000 and 2500 limits on the number of addresses that would be sent by sending nodes, even though those limits were not introduced until mid-late 2010.

764.

Those anachronisms show that the document cannot derive from December 2008, as the document’s metadata purports to suggest. Satoshi Nakamoto would have been well aware of that shortcoming.

Next page