Geth StateDB that works ontop of ipld-eth-db, leveraging its unique indexes
Go to file
Roy Crihfield 7381b35dc6 Redo trie_by_cid package to be read-write
* use logrus instead of geth log
* remove benchmarks
* impl NodeIterator.ParentPath
* update go mods
2023-05-19 01:08:07 +08:00
direct_by_leaf Test cleanup 2023-05-15 00:12:49 +08:00
internal Redo trie_by_cid package to be read-write 2023-05-19 01:08:07 +08:00
sql Reorganize packages 2023-04-24 18:34:49 +08:00
trie_by_cid Redo trie_by_cid package to be read-write 2023-05-19 01:08:07 +08:00
.gitignore init commit 2023-02-22 18:57:42 -06:00
go.mod Redo trie_by_cid package to be read-write 2023-05-19 01:08:07 +08:00
go.sum Redo trie_by_cid package to be read-write 2023-05-19 01:08:07 +08:00
README.md add a bit to the README about the alt implementation 2023-04-09 12:59:07 -05:00

ipld-eth-statedb

Implementation of the geth vm.StateDB on top of ipld-eth-db, to allow us to plug into existing EVM functionality. Analogous to ipfs-ethdb but at one database abstraction level higher. This allows us to bypass the trie-traversal access pattern normally used by the EVM (and which ipfs-ethdb allows us to replicate ontop of our Postgres IPLD blockstore in the "public.blocks" table) and access state and storage directly in the "state_cids" and "storage_cids" tables.

Note: "IPFS" is chosen in the name of "ipfs-ethdb" as it can function through an IPFS BlockService abstraction or directly ontop of an IPLD blockstore, whereas this repository is very tightly coupled to the schema in ipld-eth-db.

The top-level package contains the implementation of the vm.StateDB interface that accesses state directly using the state_cids and storage_cids tables in ipld-eth-db. The trie_by_cid package contains an alternative implementation which accesses state in ipld.blocks through the typical trie traversal access pattern (using CIDs instead of raw keccak256 hashes), it is used for benchmarking and for functionality which requires performing a trie traversal (things which must collect intermediate nodes, e.g. eth_getProof and eth_getSlice).