We should be busy trying to make the network as resilient as possible. This reliance on IRC and a few hard-coded nodes is an obvious weak point. The protocol should be hashed out rapidly and implementations should be as secure as possible. If the protocol is set, the software is solid and the network strong, then bitcoin has hope. The value will sort itself out naturally.
It was taught in CS class that some critical NASA programs have to be mathematically proven it won't go awry using finite state machine models. Any digital currency that becomes foundation of the commerce of modern society, it has to undergo same process, I think.
When you say "be mathematically proven it won't go awry using finite state machine models" do you mean that incase the bits holding the registers for the finite state machine get flipped (and thus may enter into a random state), that the state machine transitions must be robust such that it will gracefully return the state machine back to a known legitimate state?
Regarding finding peers, what about something like what TOR uses, or maybe even better
I2P Network Database, which is a bit more decentralized:
Overview
I2P's netDb is a specialized distributed database, containing just two types of data - router contact information (RouterInfos) and destination contact information (LeaseSets). Each piece of data is signed by the appropriate party and verified by anyone who uses or stores it. In addition, the data has liveliness information within it, allowing irrelevant entries to be dropped, newer entries to replace older ones, and protection against certain classes of attack.
The netDb is distributed with a simple technique called "floodfill", where a subset of all routers, called "floodfill routers", maintains the distributed database.
RouterInfo
When an I2P router wants to contact another router, they need to know some key pieces of data - all of which are bundled up and signed by the router into a structure called the "RouterInfo", which is distributed with the SHA256 of the router's identity as the key. The structure itself contains:
The router's identity (a 2048bit ElGamal encryption key, a 1024bit DSA signing key, and a certificate)
The contact addresses at which it can be reached (e.g. TCP: example.org port 4108)
When this was published
A set of arbitrary text options
The signature of the above, generated by the identity's DSA signing key
...
Bootstrapping
The netDb is decentralized, however you do need at least one reference to a peer so that the integration process ties you in. This is accomplished by "reseeding" your router with the RouterInfo of an active peer - specifically, by retrieving their routerInfo-$hash.dat file and storing it in your netDb/ directory. Anyone can provide you with those files - you can even provide them to others by exposing your own netDb directory. To simplify the process, volunteers publish their netDb directories (or a subset) on the regular (non-i2p) network, and the URLs of these directories are hardcoded in I2P. When the router starts up for the first time, it automatically fetches from one of these URLs, selected at random.
Floodfill
The floodfill netDb is a simple distributed storage mechanism. The storage algorithm is simple: send the data to the closest peer that has advertised itself as a floodfill router. Then wait 10 seconds, pick another floodfill router and ask them for the entry to be sent, verifying its proper insertion / distribution. If the verification peer doesn't reply, or they don't have the entry, the sender repeats the process. When the peer in the floodfill netDb receives a netDb store from a peer not in the floodfill netDb, they send it to a subset of the floodfill netDb-peers. The peers selected are the ones closest (according to the XOR-metric) to a specific key.
Determining who is part of the floodfill netDb is trivial - it is exposed in each router's published routerInfo as a capability.
Floodfills have no central authority and do not form a "consensus" - they only implement a simple DHT overlay.
I'm still trying to understand it all. There seems to always be
some sort of bootstrapping for any p2p network (anyone know if this is always the case?). Is maybe selecting a "URL at random" from the list of hardcoded directories a better idea than just picking them from the list in order? It seems having different locations for directory lookup has less likelihood of centralized point of failure...