From the below assertions, I undertood that BNS is a state machine built on the Virtualchain. But its a bit confusing how it is associated with Atlas (especially because of (2.))
Blockstack uses BNS as the default naming system. BNS is implemented by defining a state machine and rules for state transitions in a new virtualchain
– Blockstack technical whitepaper
Atlas is a 100%-replicated content-addressible chunk store that uses the sequence of hashes announced on BNS to discover and replicate chunks. As can be seen in Figure 2, Atlas gets the list of chunk hashes from NAME_IMPORT, NAME_UPDATE, and NAME_RENEW transactions, and uses them to coordinate with other Atlas peers to find any chunks for which it does not yet have data.
BNS binds a name to zero or more Atlas chunk hashes. BNS is only aware of the 20-byte payloads assigned to each name. It does not know about the Atlas chunks (nor does it make any assumptions about how the 20-byte payload will be interpreted). Atlas sits “on top” of BNS and interprets the list of 20-byte payloads as chunk hashes.
Thanks for the response @jude I understood that BNS uses Atlas to store off chain data in chunks.
Atlas sits “on top” of BNS => kind of implies that Atlas has a dependency on BNS. But is that just in the blockstack context ? or is Atlas tightly coupled with BNS ?
There are no free-standing Atlas implementations that I’m aware of. However, Atlas is a protocol defined independently of BNS, so it’s possible to construct an Atlas network outside of Blockstack (provided that the Atlas peers have a way to agree on the same chunk sequence). The linked document describes how an Atlas peer would obtain its chunk hashes from a BNS node, but there’s nothing stopping you from implementing an Atlas network that exchanges chunk hashes using, for example, a shared .torrent file.