Was just wondering how Holochains could be / are bootstrapped without servers over the public internet.
For bootstrapping, are you intending to provide a simple DNA (probably packaged with Holochain) that creates a global DHT storing a mapping of DNA hashes to IP addresses (of nodes running each DNA)?
Someone could download this DNA and a collection of static IPs with the DNA, or just get the DNA, run it, and get an initial set of IPs over a LAN from someone else using Holochain (and the DNA)?
Seems it would be nice to have an âinstall over LANâ feature, to encourage bootstrapping without public web servers?
I could be wrong but I think once the networking is finished all you would need is the DNA and this would be able to find all the other nodes with the same DNA. You would not need any IPs.
Without going lower down in the stack and replacing TCP/IP Iâm not sure how that would be possible? (over LAN there are possibilities but iâm referring to public internet).
I was imagining:
Bootstrap servers (temporary) -> Bootstrap DNA -> DNA
Then (once Bootstrap DNA and number of users is large enough):
LAN / Bluetooth -> Bootstrap DNA -> DNA
Which still requires physical proximity to a peer for bootstrapping (âbootstrapping the bootstrappingâ ), but eliminates the public servers.
The Bootstrap DNA and a large set of static IPs could be packaged and communicated through any carrier.
This also means you donât have to independently/individually bootstrap each DNA, though you could (of course) or may want to, in which case you would not publish the hash of the DNA in the bootstrap DNA.
I was just wondering if there was a design or plan already in motion for something above? Does it make sense?
In the world of TCP/IP âBootstrap servers (temporary)â (above) to bootstrap a âBootstrap DNAâ, would obviously still require/use static IPs (directly or indirectly via DNS)âŚ
From the perspective of having a scalable âunenclosable carrierâ, this is a slight issue as the public bootstrap nodes can be âenclosedâ.
To circumvent this Iâm imagining something along the lines of a Holochain binary being packaged with a bootstrap DNA with large set of static IPs (dynamic wonât work as DNA lease is probably < 24 hrs), that can be shared over any another carrier, including/especially LAN or Bluetooth⌠so a peer can bootstrap another peer without public servers which depends on DNS, and a bunch of other things.
So, over LAN or Bluetooth, for example, I would be providing my friend with the Holochain binary (so they donât need to download it), a bootstrap DNA with a mapping of public DNA (hashes) to IPs, and then once they set it up, then, over Bluetooth or LAN (or whatever), their node would gossip with mine and they would receive the latest IPs and DNA hashes⌠and be able to access directly the peer networks by their IP addressâŚ
This is all of course in the context of using TCP/IP stillâŚ
Ultimately it would be nice to replace the whole TCP/IP (internet) networking stack and have the DNA hash be the equivalent of an IP address, and somehow route the packets based on that, as though it was an IP address.
Holochain binary + bootstrap DNA + static IPs (of some nodes hosting the bootstrap DNA/DHT) could be distributed in public places⌠and doesnât require proximal communication with a peer over LAN/Bluetooth to bootstrap. â could just be a read-only USB stick glued into a wall, (haha).
Holochain binary + bootstrap DNA without static IPs, does require proximal communication with a peer over LAN/Bluetooth (to get the IPs of nodes) to bootstrap.
Also you could have nodes running on Holoports or Raspberry PIs in cafes. So anyone could install Holochain over LAN without public web-servers.
as you guess @larky we arenât able to make the bootstrap problem go away if weâre running on top of TCP/IP. Apparently weâre toying around with a âdiscovery DHTâ which does what you describe â not sure if it would be a DHT powered by its own hApp or if it would be more low-level than that. One design problem weâll have to get right is not leaking information about who is currently participating in what DHT!
Bootstrapping is a hard thing to get right! And ârightâ probably has a different meaning for each application. Some would be okay with âbootstrap nodesâ even though theyâre centralisation singletons and vulnerable to corruption/DDoSing/enclosure.
Some would be better served by the HC installer sneakernet you describe later. An interesting consequence of this sneakernet is that you could actually build your network using this sneakernet installer, and avoid not just DNS singletons but singletons of any sort! But friends with USB/bluetooth/LAN is a very slow propagation medium oh, I see you suggested that in a later post
Secure Scuttlebutt takes both of those approaches: their âpubsâ are popular bootstrap nodes, some of them resolveable by DNS. Theyâre just peers that happen to follow (replicate) anyone who follows them. You can also discover peers via sneakernet/LAN/etc. And theyâre even toying with the idea of a discovery DHT.
Design solutions tend to converge into patterns if theyâre any good⌠the fact that youâre echoing what SSB and Holochain are already exploring is, hopefully, a validation.
not sure if it would be a DHT powered by its own hApp or if it would be more low-level than that.
Probably lower-level would be better, I imagine, especially so that it would be possible to delete old entries in the DHT (expired IPs).
One design problem weâll have to get right is not leaking information about who is currently participating in what DHT!
Yes indeed, aside from agent IDs, IP addresses are loosely coupled with identity and also geolocation (in the case of Google, and whoever has access to their elite data-set, much more strongly coupled).
IP addresses could be encrypted (in the discovery/bootstrap DHT), assuming a public-private key-pair per DNA is distributed through a secure channel with the DNA hash.
There could be a more public DNA for that, which relates to âapplication distributionâ; DNA hashâs, DNAs themselves (base64 blob of entire dna.json file), keys, etc., could also be distributed through Holochainâs agent-to-agent messaging⌠(encrypted with agent public keys).
Good point. That could be scary business indeed. And even MaxMindâs GeoIP database is free for the querying, so itâs not such an elite thing as all that!
Hm, thereâs a possibility, although there are also risks of snooping DHT membership by public key, not just IP address. Would require some design to prevent public keys being associated with real humans somehow. To an extent DPKI makes this easy by allowing a user to generate a new keypair for each app instance they run.
Thereâs also a chicken-and-egg problem: we donât know who to ask for the decryption keypair, because we donât know the addresses of any of the existing agents (theyâre all encrypted). And if there is a way of securely/privately getting that keypair, youâre not really part of that network until after your peers in that network have approved your agent ID entry. So you shouldnât really be allowed to find out who belongs to the network. But once you get that decryption keypair, youâre able to find out that information.
I think in most cases youâd want this sort of thing handled by public âbootstrap nodesâ who donât mind having a bit of their identity revealed. This obviates the need to do the encryption thing too.
Well! Funny you should say that⌠https://github.com/holochain/HCHC-rust This is a funny-named repo because it contains TypeScript code, not Rust I do know theyâve de-prioritised it for the first couple waves of Holo Host alpha.