In the Blockstack diagram, I do not understand where zone files originate. If only the hash of the zone file is stored in the virtualchain, how does the actual zone file make it to the above routing layer?
Good question. So you need to have the zonefile to get the hash(zonefile). Imagine you’re on your computer and are running Blockstack, you will generate a new zonefile and announce the hash(zonefile) to the blockchain. Afterwards you will upload your newly generated zonefile to the Atlas network.
The routing layer data is handled by the Atlas network which is a peer-to-peer network. All Blockstack Core nodes participate in the Atlas network by default.
The Atlas network is designed to reject any writes to it where the hash(zonefile) was not announced on the blockchain. Meaning that you can’t just write junk data to the Atlas network. You need to register a domain (which costs money) and announce the hash(zonefile) (which also costs money) and only then you can write the zonefile to the Atlas network.
The Atlas network is a peer-to-peer network that will replicate the zonefile automatically on all nodes participating in the Atlas network. So once your zonefile propagates through the Atlast network it’s likely going to stay available on the network unless something catastrophic happens like the entire network (all nodes) going offline and losing all their data. Even if a single copy of data still exists the Atlas network can recover.
Let me know if you have other questions.