Skip to content

Commit

Permalink
Merge pull request #58 from cerc-io/roy/v5-dev
Browse files Browse the repository at this point in the history
Update to v5
  • Loading branch information
i-norden authored Apr 9, 2023
2 parents 2709f7b + a1e3f60 commit 05559e2
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 10 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## ipfs-ethdb

[![Go Report Card](https://goreportcard.com/badge/github.com/vulcanize/ipfs-ethdb)](https://goreportcard.com/report/github.com/vulcanize/ipfs-ethdb)
[![Go Report Card](https://goreportcard.com/badge/github.com/cerc/ipfs-ethdb)](https://goreportcard.com/report/github.com/cerc-io/ipfs-ethdb)

> go-ethereum ethdb interfaces for Ethereum state data stored in IPFS
Expand All @@ -11,7 +11,7 @@ interfacing with a state database. These interfaces are used to build higher-lev
which are used to perform the bulk of state related needs.

Ethereum data can be stored on IPFS, standard codecs for Etheruem data are defined in the [go-cid](https://github.com/ipfs/go-cid) library.
Using our [statediffing geth client](https://github.com/vulcanize/go-ethereum/releases/tag/v1.9.11-statediff-0.0.2) it is feasible to extract every single
Using our [statediffing geth client](https://github.com/cerc-io/go-ethereum/releases/tag/v1.9.11-statediff-0.0.2) it is feasible to extract every single
state and storage node and publish it to IPFS.

Geth stores state data in leveldb as key-value pairs between the keccak256 hash of the rlp-encoded object and the rlp-encoded object.
Expand Down Expand Up @@ -50,7 +50,7 @@ import (
"github.com/ipfs/go-ipfs/core"
"github.com/ipfs/go-ipfs/repo/fsrepo"
"github.com/jmoiron/sqlx"
"github.com/vulcanize/ipfs-ethdb/v5"
"github.com/cerc-io/ipfs-ethdb/v5"
)

func main() {
Expand Down
10 changes: 7 additions & 3 deletions postgres/doc.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## ipfs-ethdb

IPFS has been [extended](https://github.com/vulcanize/go-ipfs/releases/tag/v0.4.22-alpha) to [use Postgres](https://github.com/vulcanize/go-ipfs-config/releases/tag/v0.0.8-alpha) as a backing [datastore](https://github.com/ipfs/go-ds-sql/tree/master/postgres).
IPFS has been [extended](https://github.com/cerc-io/go-ipfs/releases/tag/v0.4.22-alpha) to [use Postgres](https://github.com/cerc-io/go-ipfs-config/releases/tag/v0.0.8-alpha) as a backing [datastore](https://github.com/ipfs/go-ds-sql/tree/master/postgres).
Interfacing directly with the IPFS-backing Postgres database has some advantages over using the blockservice interface.
Namely, batching of IPFS writes with other Postgres writes and avoiding lock contention on the ipfs repository (lockfile located at the `IPFS_PATH`).
The downside is that we forgo the block-exchange capabilities of the blockservice, and are only able to fetch data contained in the local datastore.
Expand All @@ -18,7 +18,7 @@ import (
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/trie"
"github.com/jmoiron/sqlx"
"github.com/vulcanize/ipfs-ethdb/v5/postgres"
"github.com/cerc-io/ipfs-ethdb/v5/postgres/v1"
)

func main() {
Expand All @@ -31,7 +31,11 @@ func main() {
trieNodeIterator := t.NodeIterator([]byte{})
// do stuff with trie node iterator

database := pgipfsethdb.NewDatabase(db)
database := pgipfsethdb.NewDatabase(db, pgipfsethdb.CacheConfig{
Name: "db",
Size: 3000000, // 3MB
ExpiryDuration: time.Hour,
})
stateDatabase := state.NewDatabase(database)
stateDB, _ := state.New(common.Hash{}, stateDatabase, nil)
stateDBNodeIterator := state.NewNodeIterator(stateDB)
Expand Down
5 changes: 3 additions & 2 deletions postgres/shared/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@

package shared

import "github.com/jmoiron/sqlx"
import (
"github.com/jmoiron/sqlx"
)

/*
Hostname: "localhost",
Expand All @@ -25,7 +27,6 @@ import "github.com/jmoiron/sqlx"
Username: "vdbm",
Password: "password",
*/

// TestDB connect to the testing database
// it assumes the database has the IPFS ipld.blocks table present
// DO NOT use a production db for the test db, as it will remove all contents of the ipld.blocks table
Expand Down
2 changes: 1 addition & 1 deletion postgres/v0/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ func (d *Database) dbGet(key string) ([]byte, error) {
var data []byte
err := d.db.Get(&data, getPgStr, key)
if err == sql.ErrNoRows {
log.Warn("Database miss for key", key)
log.Warn("Database miss for key ", key)
}

return data, err
Expand Down
6 changes: 6 additions & 0 deletions postgres/v1/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ var (
putPgStr = "INSERT INTO ipld.blocks (key, data, block_number) VALUES ($1, $2, $3) ON CONFLICT DO NOTHING"
deletePgStr = "DELETE FROM ipld.blocks WHERE key = $1"
dbSizePgStr = "SELECT pg_database_size(current_database())"

DefaultCacheConfig = CacheConfig{
Name: "db",
Size: 3000000, // 3MB
ExpiryDuration: time.Hour,
}
)

var _ ethdb.Database = &Database{}
Expand Down
2 changes: 1 addition & 1 deletion util.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func Keccak256ToCid(h []byte, codec uint64) (cid.Cid, error) {
if err != nil {
return cid.Cid{}, err
}
return cid.NewCidV1(codec, multihash.Multihash(buf)), nil
return cid.NewCidV1(codec, buf), nil
}

// NewBlock takes a keccak256 hash key and the rlp []byte value it was derived from and creates an ipfs block object
Expand Down

0 comments on commit 05559e2

Please sign in to comment.