Compose DB Clarifications

Forgive me if some of these are due to lack of knowledge of the system/infrastructure and GraphQL, but I didn’t quite understand a few concepts with what I understand to be the goals of ComposeDB:

  1. Is there a high level network/block diagram of what a stream is composed of and where this sits in the “Ceramic stack” vs. open internet, IPFS, etc. I want to ensure my mental pictures of how this works matches reality :slight_smile:

  2. If I want to use a generic AddressBook - is there a way for me to search the most used AddressBook data struct being used in ComposeDB so I can ensure my AddressBook is compatible with the most dApps possible? (related to #3)

  3. If I create an AddressBook and want dApps to interact with my data model, how do they know to use my AddressBook over another one? Do I have to manually share some info (streamIDs) with users/clients to know which data model is mine?

  4. I’m not familiar with libp2p/pubsub in detail, but I understand it to be a method of decentralized peer-to-peer comms (including peer discovery?) If all Ceramic streams are under one pubsub topic, is there any limitation on finding peers based on say, a wallet address in the most used AddressBook models? My motivation behind this question is to find all AddressBooks with my wallet address in them, without having to keep a centralized repository of streamIDs which are using my shared AddressBook model. Not sure if this is possible?

  5. Is claynet just locally hosted? Or are all users using claynet able to share models and interact with each other (like using Mumbai on Polygon testnet).

  6. Are there any plans for RFC/EIP standards for basic building blocks to help drive shared model adoption?

  1. Is there a high level network/block diagram of what a stream is composed of and where this sits in the “Ceramic stack” vs. open internet, IPFS, etc. I want to ensure my mental pictures of how this works matches reality :slight_smile:

This diagram may be useful. Note that in the diagram the “Genesis”, “Signed Commit”, “Anchor Commit”, and “Proof metadata” are all objects stored on IPFS.

  1. If I want to use a generic AddressBook - is there a way for me to search the most used AddressBook data struct being used in ComposeDB so I can ensure my AddressBook is compatible with the most dApps possible? (related to #3)

You can see a list of all data models published to the network, but as of right now there is no easy/built-in way to get usage statistics for each model. We recognize this as something that would be very useful and hope to see something built to address this in the future, either by the community or the 3boxlabs team if necessary.

  1. If I create an AddressBook and want dApps to interact with my data model, how do they know to use my AddressBook over another one? Do I have to manually share some info (streamIDs) with users/clients to know which data model is mine?

If you want to specifically tell someone about your model, you can send them the StreamID of the model. It is also possible to query the set of all published Models by the DID that published it, so if someone knows your DID they can query for all your published Models. For those who don’t know the Model StreamID or your DID, they can discover your model in the list of published models (which is viewable from the ComposeDB CLI), but as mentioned above there’s no usage statistics associated with that data currently.

  1. I’m not familiar with libp2p/pubsub in detail, but I understand it to be a method of decentralized peer-to-peer comms (including peer discovery?) If all Ceramic streams are under one pubsub topic, is there any limitation on finding peers based on say, a wallet address in the most used AddressBook models? My motivation behind this question is to find all AddressBooks with my wallet address in them, without having to keep a centralized repository of streamIDs which are using my shared AddressBook model. Not sure if this is possible?

I don’t think you can easily look up peers based on wallet address or DID, but you can certainly use ComposeDB to index the set of all Models and then query the set of Models for those that were created by a given DID (which in turn can correlate to a wallet address).

  1. Is claynet just locally hosted? Or are all users using claynet able to share models and interact with each other (like using Mumbai on Polygon testnet).

They clay testnet is networked and connected much like mainnet. Streams published on one Clay node should be loadable by any node on the Clay network.

  1. Are there any plans for RFC/EIP standards for basic building blocks to help drive shared model adoption?

There are plans to formalize parts of the Ceramic protocol as standards, but I think you’re asking about standards for data models? There is nothing concrete being driven 3BoxLabs on this front at the moment, but personally I think it would be awesome if people in the community wanted to build a place for these types of proposals and discussions.

2 Likes