Skip to content

Commit 4f46ea0

Browse files
authored
Merge pull request #30 from vulcanize/statediff-into-postgres
Write state diffs directly to Postgres
2 parents f61649e + 03ad33d commit 4f46ea0

File tree

114 files changed

+5955
-5018
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+5955
-5018
lines changed

cmd/geth/config.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,22 @@ func makeFullNode(ctx *cli.Context) *node.Node {
159159
utils.RegisterEthService(stack, &cfg.Eth)
160160

161161
if ctx.GlobalBool(utils.StateDiffFlag.Name) {
162-
utils.RegisterStateDiffService(stack)
162+
var dbParams *[3]string
163+
if ctx.GlobalIsSet(utils.StateDiffDBFlag.Name) {
164+
dbParams = new([3]string)
165+
dbParams[0] = ctx.GlobalString(utils.StateDiffDBFlag.Name)
166+
if ctx.GlobalIsSet(utils.StateDiffDBNodeIDFlag.Name) {
167+
dbParams[1] = ctx.GlobalString(utils.StateDiffDBNodeIDFlag.Name)
168+
} else {
169+
utils.Fatalf("Must specify node ID for statediff DB output")
170+
}
171+
if ctx.GlobalIsSet(utils.StateDiffDBClientNameFlag.Name) {
172+
dbParams[2] = ctx.GlobalString(utils.StateDiffDBClientNameFlag.Name)
173+
} else {
174+
utils.Fatalf("Must specify client name for statediff DB output")
175+
}
176+
}
177+
utils.RegisterStateDiffService(stack, dbParams, ctx.GlobalBool(utils.StateDiffWritingFlag.Name))
163178
}
164179

165180
// Whisper must be explicitly enabled by specifying at least 1 whisper flag or in dev mode

cmd/geth/main.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,10 @@ var (
147147
utils.EWASMInterpreterFlag,
148148
utils.EVMInterpreterFlag,
149149
utils.StateDiffFlag,
150+
utils.StateDiffDBFlag,
151+
utils.StateDiffDBNodeIDFlag,
152+
utils.StateDiffDBClientNameFlag,
153+
utils.StateDiffWritingFlag,
150154
configFileFlag,
151155
}
152156

cmd/geth/usage.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,10 @@ var AppHelpFlagGroups = []flagGroup{
255255
Name: "STATE DIFF",
256256
Flags: []cli.Flag{
257257
utils.StateDiffFlag,
258+
utils.StateDiffDBFlag,
259+
utils.StateDiffDBNodeIDFlag,
260+
utils.StateDiffDBClientNameFlag,
261+
utils.StateDiffWritingFlag,
258262
},
259263
},
260264
{

cmd/utils/flags.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,22 @@ var (
761761
Name: "statediff",
762762
Usage: "Enables the processing of state diffs between each block",
763763
}
764+
StateDiffDBFlag = cli.StringFlag{
765+
Name: "statediff.db",
766+
Usage: "PostgreSQL database connection string for writing state diffs",
767+
}
768+
StateDiffDBNodeIDFlag = cli.StringFlag{
769+
Name: "statediff.dbnodeid",
770+
Usage: "Node ID to use when writing state diffs to database",
771+
}
772+
StateDiffDBClientNameFlag = cli.StringFlag{
773+
Name: "statediff.dbclientname",
774+
Usage: "Client name to use when writing state diffs to database",
775+
}
776+
StateDiffWritingFlag = cli.BoolFlag{
777+
Name: "statediff.writing",
778+
Usage: "Activates progressive writing of state diffs to database as new block are synced",
779+
}
764780
)
765781

766782
// MakeDataDir retrieves the currently requested data directory, terminating
@@ -1633,12 +1649,15 @@ func RegisterGraphQLService(stack *node.Node, endpoint string, cors, vhosts []st
16331649
}
16341650

16351651
// RegisterStateDiffService configures and registers a service to stream state diff data over RPC
1636-
func RegisterStateDiffService(stack *node.Node) {
1652+
// dbParams are: Postgres connection URI, Node ID, client name
1653+
func RegisterStateDiffService(stack *node.Node, dbParams *[3]string, startWriteLoop bool) {
16371654
if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) {
16381655
var ethServ *eth.Ethereum
1639-
ctx.Service(&ethServ)
1640-
blockChain := ethServ.BlockChain()
1641-
return statediff.NewStateDiffService(blockChain)
1656+
err := ctx.Service(&ethServ)
1657+
if err != nil {
1658+
return nil, err
1659+
}
1660+
return statediff.NewStateDiffService(ethServ, dbParams, startWriteLoop)
16421661
}); err != nil {
16431662
Fatalf("Failed to register State Diff Service", err)
16441663
}

go.mod

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,47 +21,59 @@ require (
2121
github.com/dop251/goja v0.0.0-20200106141417-aaec0e7bde29
2222
github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c
2323
github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa
24-
github.com/fatih/color v1.3.0
24+
github.com/fatih/color v1.7.0
2525
github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc
2626
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff
2727
github.com/go-ole/go-ole v1.2.1 // indirect
2828
github.com/go-sourcemap/sourcemap v2.1.2+incompatible // indirect
2929
github.com/go-stack/stack v1.8.0
30-
github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c
30+
github.com/golang/protobuf v1.3.2
3131
github.com/golang/snappy v0.0.1
3232
github.com/google/go-cmp v0.3.1 // indirect
33-
github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989
33+
github.com/gorilla/websocket v1.4.2
3434
github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277
35-
github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad
35+
github.com/hashicorp/golang-lru v0.5.4
3636
github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3
3737
github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883
38+
github.com/ipfs/go-block-format v0.0.2
39+
github.com/ipfs/go-cid v0.0.7
40+
github.com/ipfs/go-ipfs-blockstore v1.0.1
41+
github.com/ipfs/go-ipfs-ds-help v1.0.0
42+
github.com/ipfs/go-ipld-format v0.2.0
3843
github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458
39-
github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21
44+
github.com/jmoiron/sqlx v1.2.0
45+
github.com/julienschmidt/httprouter v1.2.0
4046
github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356
41-
github.com/kr/pretty v0.1.0 // indirect
4247
github.com/kylelemons/godebug v1.1.0 // indirect
43-
github.com/mattn/go-colorable v0.1.0
44-
github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035
48+
github.com/lib/pq v1.8.0
49+
github.com/mattn/go-colorable v0.1.1
50+
github.com/mattn/go-isatty v0.0.5
51+
github.com/multiformats/go-multihash v0.0.14
4552
github.com/naoina/go-stringutil v0.1.0 // indirect
4653
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416
4754
github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c
55+
github.com/onsi/ginkgo v1.7.0
56+
github.com/onsi/gomega v1.4.3
4857
github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222
4958
github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7
50-
github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150
59+
github.com/prometheus/client_golang v0.9.3
60+
github.com/prometheus/tsdb v0.7.1
5161
github.com/rjeczalik/notify v0.9.1
5262
github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00
5363
github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521 // indirect
64+
github.com/sirupsen/logrus v1.7.0
65+
github.com/spf13/viper v1.7.1
5466
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4
5567
github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570
5668
github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 // indirect
5769
github.com/stretchr/testify v1.4.0
5870
github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d
5971
github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef
6072
github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208
61-
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
73+
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8
6274
golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect
63-
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f
64-
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7
75+
golang.org/x/sync v0.0.0-20190423024810-112230192c58
76+
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037
6577
golang.org/x/text v0.3.2
6678
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
6779
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce

0 commit comments

Comments
 (0)