---
tags: v3
---
# Data Storage Experiments
## 1. Poster
##### Solution:
Replace airtable - read and write dao metadata.
On chain and simple implementation. Downside is it requires a transaction.
Metadata updates emited in contract events + stored in subgraph
##### Success Criteria
1. Sufficient Decentralizaton
2. Can enforce member only updates
3. Is easy/fast to query
4. Will plug into the current front end implementation with minimal changes
5. Can be utilized in lambda functions similar to current solution
##### Detail
- 1 contract deployed per network
- Each metadata update is a transaction a member makes with the json metadat schema as an arg
```
function post(string calldata content, string calldata tag) public {
emit NewPost(msg.sender, content, tag);
}
```
- Subgraph to catch each event
- parse json, validate content and create metadata entity
- Subgraph can be queried by molochAddress
- get latest metadata record
- Some considerations
- mainnet transaction cost
- could explore a single contract on xdai and require network switch
- makes member check in subgraph impossible
- worse ux
- could have this as a boost/optin
- tier 1 = centralized data (do we want to support this at all?)
- tier 2 = member only
- tier 3 = requires minion proposal
- alternate idea:
- 'What if on the new app we started decentralized, then offered centralized caching boosts to speed things up?'
- Challenges
- json parsing in subgraph mappings - solved
- TODO
- define data schema
- how do we change this - will be easy to add fields
- will this work for our deeply nested elements - boosts/playlists
- will need to store a lot as just json and have subgraph fields for essential items like 'name' used in search/filters
- define schema for making updates
- send an array of fields we are updating + new data
- can look up and update only those fields in subgraph
- define summon flow
- define upgrade flow
- how to we get current metadata blobs into this solution
#### Progress/implementation notes
Rinkeby contract:
https://rinkeby.etherscan.io/address/0x917d84787a266f9d649d519a7ec8445ea43514d8#code
Subgraph test:
https://thegraph.com/hosted-service/subgraph/odyssy-automaton/daohaus-poster-rinkeby?selected=playground
#### Results
1. Sufficient Decentralizaton
- editing data is on anchain function call
- data lives in on chain event logs + subgraphs
3. Can enforce member only updates
- subgraph will be able to check and enforce this
5. Is easy/fast to query
- integrated into our supergraph and current data pipeline
7. Will plug into the current front end implementation with minimal changes
- metadata updates will require a new transaction
- might be some additonal data management similar to how we handle playlists now
- summon flow might be the biggest effort
- first time metadata creation
- opportunity to impove what we have now
9. Can be utilized in lambda functions similar to current solution
- lambda will easily be able to use this and it likely eliminates the need for some
- add/update dao/boost metadata
##### pros
- tech is ready, can start tomorrow
- no new solution to learn
- simplest permission management
- can work for proposal based or member based
##### cons
- mainnet tx fee
- some work to integrate, but likely less than other solutions
----
## 2. Ceramic
Replace airtable - read and write dao metadata.
current feeling from sam is we need a moloch:did
- need to be able to fetch did with a moloch address without backend cache
----
## 3. Textile
Replace s3 - store hydrated, app-ready data
----
## 3. Storj
Replace s3 - store hydrated, app-ready data
----
## 4. Skynet
Replace s3 - store hydrated, app-ready data