I have some questions as I’m unfamiliar with the SAFE network but would like to make the project I’m working on compatible with it. I am building a distributed directory on the Ethereum blockchain called Nebulis which is intended to upgrade and replace the DNS system. Nebulis IPA’s (Interplanetary Addresses) can map to a wide-variety of content-addressed protocols such as IPFS, Storj and Swarm. I’m hoping to make it compatible with Safe also.
Is the content-addressing scheme similar to IPFS in terms of length; i.e. a hash that fits into 32 bytes? What is the format that data is addressed and transferred within the network?
the SAFE network has a built-in DNS-mechanism based on ownership of specific, decypher-able addresses in the network and their lookup. Which is also completely secured as any other content in the network – with all the properties of DDoS preventative, peer-2-peer-driven DHT lookup etc, etc…
However, to answer your specific question: Any object in the network is being addresses using so called XOR-Names – see this blog post to learn more about this – and while they are normally not shown to users (unlike the systems you mentioned), you could most certainly built your own DNS-System using them as their values. Each XORName is bound to be max 32 bytes in length, too. See the source code:
Both IPFS and SAFE have some kind of native naming scheme involved, however Nebulis is purposefully generic and is designed to be a directory which is compatible with a wide variety of transport protocols. In a single domain you can have records which could reference multiple, so you could refer to wallets, contracts, IP-addresses, content-hashes and storage associated with the same domain.
One question I have is whether there is some kind of SAFE API where you can verify whether a content-address really exists? Basically I’d like to have an “Ox Registry” where when you add a safe record, it pings the registry contract and then runs a check in the Safe network via oracle to get back a boolean for whether the record is valid. Is this currently possible within the current toolset?