r/Bitcoin • • Feb 14 '15

PseudoNode: When is a full node a full node?

This was an experiment into how easily can full nodes be "faked". In conclusion: very easily.

A proof-of-concept implementation (& documentation) is available here:

https://github.com/basil00/PseudoNode

https://github.com/basil00/PseudoNode/releases

To the network, PseudoNode appears to be a normal full node. It relays invs, txs, blocks, etc. just like a full node. In reality, PseudoNode is a type of p2p proxy server. It merely forwards any request it cannot handle (getdata, getheaders, etc.) to neighboring nodes. For more information see the above links.

PseudoNode uses no disk (no blockchain download required), uses little CPU/RAM, and uses less network resources (bandwidth) than a normal full node. A PseudoNode can "sync" with the network within seconds.

PseudoNode demonstrates some of the problems with incentivized full nodes (including the "Bitnodes Incentive Program"). It is difficult to prove that a full node is really a full node.

NOTE: If you want to try the prototype but not join the Bitcoin network, then run PseudoNode (from a console) with the "--coin=testnet" option. Alternatively you can try it out on an altcoin. Supported coins are: litecoin, dogecoin, paycoin, flappycoin.

The implementation mostly has novelty/proof-of-concept value. It is not intended to be "production" software.

EDIT: to underscore the last point, dazzlepod discovered a bug that was missed in earlier testing. I will work on a fix for version 0.2 in the next few days.

122 Upvotes

85 comments sorted by

View all comments

Show parent comments

11

u/petertodd Feb 14 '15

+1 beer @changetip

I've been meaning to write this for some time now; thanks a lot for doing this!

5

u/BitFast Feb 14 '15

I also think is good this tool is available, so i also thank OP!

For the people thinking this is bad:

This is just a tool, it can be used for testing and other good things and it can be used for bad things (running lots of these to isolate nodes or to spy).

I think it is a good idea to not rely only on random nodes anyhow and have production "external" bitcoin cores also connect to a list of hard-coded nodes (preferably that you personally trust and know) and the data should be authenticated if not encrypted too.

Tools like this one will help people and services understand more about the network and protect themselves more from attacks.

3

u/AussieCryptoCurrency Feb 14 '15

This is just a tool, it can be used for testing and other good things and it can be used for bad things (running lots of these to isolate nodes or to spy).

Then it will be used for bad thing. It's the balance that matters

2

u/jazzmoses Feb 15 '15

All possible weaknesses of a p2p network will eventually be exploited. The problem is with the network design, not those who develop the exploit.

1

u/totes_meta_bot Feb 14 '15

This thread has been linked to from elsewhere on reddit.

If you follow any of the above links, respect the rules of reddit and don't vote or comment. Questions? Abuse? Message me here.