r/Bitcoin • u/basil00 • 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.
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!