|
||
---|---|---|
internal | ||
trie_by_cid | ||
.gitignore | ||
access_list.go | ||
config.go | ||
database.go | ||
go.mod | ||
go.sum | ||
interfaces.go | ||
journal.go | ||
pgx.go | ||
README.md | ||
sql.go | ||
sqlx.go | ||
state_database.go | ||
state_object.go | ||
statedb_test.go | ||
statedb.go | ||
transient_storage.go |
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
).