As the current Ethereum state grows, we believe it is important to allow individuals to store state in a distributed way. As ethereumjs-client is a new client we thought it would be interesting to experiment with storing state on ipfs.
What it does
We are attempting to sync ethereumjs-client with state being stored on ipfs.
How we built it
Ethereumjs-client works by importing ethereumjs-blockchain which is "a module to store and interact with blocks". It is this module that instantiates leveldb. We replaced it with orbitdb which "provides various types of databases for different data models and use cases".
Challenges we ran into
We ran into challenges getting the tests to pass in ethereumjs-blockchain and then syncing ethereumjs-client with our forked ethereumjs-orbitdb-blockchain.
Accomplishments that we're proud of
We are extremely proud of even attempting to do this. It is extremely challenging to attempt to store on ipfs.
What we learned
We learned a lot about ethereumjs-client and orbitdb.
What's next for ethereumjs-orbitdb
Next we are going to work to actually get the client to sync and preparing the code for an upstream PR. Eventually we want storing state on ipfs to be a flag that is optional allowing individuals to run full nodes without worrying about state.