Geth StateDB that works ontop of ipld-eth-db, leveraging its unique indexes
Go to file
Roy Crihfield 0eba6888c1
Merge pull request #18 from cerc-io/roy/v5-dev
* Refactor redundant DB code

* Fix storage paths

GetState takes a slot, not a leaf path

* Add trie_by_cid/state.TryGetNode

used in ipld-eth-server

* Reorganize packages

* direct_by_leaf/ is original StateDB package
* sql/ for SQL DB interfaces

* Test NodeBlob

* Fix node resolution; use Cid struct as key

was erroneously storing the cid in the fullNode's flag.cache

* Add basic trie tests
2023-04-25 15:01:12 +08:00
direct_by_leaf Add basic trie tests 2023-04-24 21:38:11 +08:00
internal Fix node resolution; use Cid struct as key 2023-04-24 18:34:49 +08:00
sql Reorganize packages 2023-04-24 18:34:49 +08:00
trie_by_cid Add basic trie tests 2023-04-24 21:38:11 +08:00
.gitignore init commit 2023-02-22 18:57:42 -06:00
go.mod updated deps 2023-04-09 12:25:11 -05:00
go.sum updated deps 2023-04-09 12:25:11 -05: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).