I'm having a blast programming a tiny little node that connects to the bitcoin network, using nothing other than sockets. I'm not using any RPC calls, or libraries, I am following the bitcoin peer to peer protocol language.
Why? To learn, because it is fun, and because I can.
It's of course not a full node, and it will never be. But it is nice to be able to interact with the network 'the hard way', especially now that it works.
So far, it connects to any number of nodes, listens for new transactions, retrieves them, and prints the full raw transaction code on my screen. Tomorrow I'll filter the transactions to the output addresses that I am interested in.
It got me thinking though.
What could I do with this kind of real time access to the raw bitcoin data?
Some thoughts.
I could send people in countries with restrictive internet (or government) policies an email (let's say once an hour) with the last 6 blocks attached - gzipped. (Quite easy).
I could upload each block to a binaries newsgroup. (A little harder, but still quite doable).
I could set up an email address to "listen" for raw transactions, and submit every single one that gets sent to the address to the bitcoin network (Quite easy, but I'll need to figure out something to prevent being abused for sending transaction spam).
I could make every block (gzipped) available through a website, away from the bitcoin client. You could synchronize everything by simply requesting all blocks in sequence and pushing them into your local bitcoin node... all without needing a working peer to peer (although, my server would be a lot less reliable than a global peer to peer network - this would enable a bridge into a network that has a restrictive firewall for example!)
Why these ideas? Because I like the concept that bitcoin is hard to shut down as long as you have any type of communication at your disposal. Of course, you can already interact using http and https, but how can we expand on that?
What are your ideas? How can we make bitcoin independent of the peer to peer network?
Thanks