Skip to content

Commit e83d9d4

Browse files
committed
cmd/geth: write verkle nodes to db
cmd/geth: flush verkle internal node after insertions cmd/geth: use node.Serialize cmd/geth: Fix flush iface
1 parent 3f96c4b commit e83d9d4

File tree

3 files changed

+55
-10
lines changed

3 files changed

+55
-10
lines changed

cmd/geth/snapshot.go

+35-6
Original file line numberDiff line numberDiff line change
@@ -484,21 +484,49 @@ func computeCommitment(ctx *cli.Context) error {
484484
}
485485
ks := kzg.NewKZGSettings(fftCfg, s1, s2)
486486

487+
stack, _ := makeConfigNode(ctx)
488+
defer stack.Close()
489+
490+
chain, chaindb := utils.MakeChain(ctx, stack, true)
491+
defer chaindb.Close()
492+
493+
verkledb, err := stack.OpenDatabase("verkle", 0, 0, "")
494+
if err != nil {
495+
log.Error("Failed to open db for verkle nodes", "error", err)
496+
return err
497+
}
498+
defer verkledb.Close()
499+
500+
nodesCh := make(chan verkle.FlushableNode)
487501
verkleGenerate := func(db ethdb.KeyValueWriter, in chan snapshot.TrieKV, out chan common.Hash) {
488502
t := verkle.New()
489503
for leaf := range in {
490-
t.InsertOrdered(common.CopyBytes(leaf.Key[:]), leaf.Value, ks, lg1)
504+
t.InsertOrdered(common.CopyBytes(leaf.Key[:]), leaf.Value, ks, lg1, nodesCh)
491505
}
506+
// Flush remaining nodes to nodes channel
507+
rootNode, ok := t.(*verkle.InternalNode)
508+
if !ok {
509+
panic("verkle tree has invalid root node")
510+
}
511+
rootNode.Flush(nodesCh)
492512
comm := t.ComputeCommitment(ks, lg1)
493513
root := common.BytesToHash(bls.ToCompressedG1(comm))
494514
out <- root
495515
}
496516

497-
stack, _ := makeConfigNode(ctx)
498-
defer stack.Close()
499-
500-
chain, chaindb := utils.MakeChain(ctx, stack, true)
501-
defer chaindb.Close()
517+
nodesCount := 0
518+
go func() {
519+
for fn := range nodesCh {
520+
nodesCount++
521+
value, err := fn.Node.Serialize()
522+
if err != nil {
523+
log.Error("Failed to serialize verkle node", "error", err)
524+
}
525+
if err := verkledb.Put(fn.Hash[:], value); err != nil {
526+
log.Error("Failed to write verkle node to db", "error", err)
527+
}
528+
}
529+
}()
502530

503531
if ctx.NArg() > 1 {
504532
log.Error("Too many arguments given")
@@ -533,6 +561,7 @@ func computeCommitment(ctx *cli.Context) error {
533561
if err := t.ComputeVerkleCommitment(root, verkleGenerate); err != nil {
534562
log.Error("Failed to compute verkle commitment", "error", err)
535563
}
564+
log.Info("Number of nodes written to DB: %d\n", nodesCount)
536565
return nil
537566
}
538567

go.mod

+4-3
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ require (
1818
github.com/fatih/color v1.7.0
1919
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5
2020
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff
21-
github.com/gballet/go-verkle v0.0.0-20210318184615-3228314e99c9
21+
github.com/gballet/go-verkle v0.0.0-20210401094554-ecbf17f30efb
2222
github.com/go-stack/stack v1.8.0
2323
github.com/golang/protobuf v1.4.3
2424
github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3
2525
github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa
2626
github.com/gorilla/websocket v1.4.2
2727
github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29
2828
github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d
29+
github.com/herumi/bls-eth-go-binary v0.0.0-20210407105559-9588dcfc7de7 // indirect
2930
github.com/holiman/bloomfilter/v2 v2.0.3
3031
github.com/holiman/uint256 v1.1.1
3132
github.com/huin/goupnp v1.0.1-0.20200620063722-49508fba0031
@@ -49,8 +50,8 @@ require (
4950
github.com/stretchr/testify v1.7.0
5051
github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca
5152
github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef
52-
golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670
53-
golang.org/x/sys v0.0.0-20210319071255-635bc2c9138d
53+
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2
54+
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57
5455
golang.org/x/text v0.3.3
5556
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
5657
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce

go.sum

+16-1
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,12 @@ github.com/gballet/go-verkle v0.0.0-20210305125751-d07bfb0dd271 h1:SQ8VtqI0zpGTA
155155
github.com/gballet/go-verkle v0.0.0-20210305125751-d07bfb0dd271/go.mod h1:qJML0ZSm9IvJ4SV9Iy/s5mNYld5tyLvVzoHTaC1Weq0=
156156
github.com/gballet/go-verkle v0.0.0-20210318184615-3228314e99c9 h1:rOR2V9fSuvpAO+4k6c34OzDyAAlA4eGLSJoYTlxZQns=
157157
github.com/gballet/go-verkle v0.0.0-20210318184615-3228314e99c9/go.mod h1:s2tVAxI5FnThDvOCzrUpNU8HxoGvFBelNLZpDEEsFuk=
158+
github.com/gballet/go-verkle v0.0.0-20210331172732-b0e741f9a8ec h1:SFb34albxbnAcY+wLS7nKL+nG6RVcQpmREE2lpJLEIk=
159+
github.com/gballet/go-verkle v0.0.0-20210331172732-b0e741f9a8ec/go.mod h1:s2tVAxI5FnThDvOCzrUpNU8HxoGvFBelNLZpDEEsFuk=
160+
github.com/gballet/go-verkle v0.0.0-20210401094554-ecbf17f30efb h1:rFYqmC5s6fMf2d1c5QoHRfylj6RiJcQPhUz9fq2DHAs=
161+
github.com/gballet/go-verkle v0.0.0-20210401094554-ecbf17f30efb/go.mod h1:s2tVAxI5FnThDvOCzrUpNU8HxoGvFBelNLZpDEEsFuk=
162+
github.com/gballet/go-verkle v0.0.0-20210408135335-4da43934fa91 h1:HRH078PDVLdcEbuMWGQJPSk05X7vvvq5cfByCLyNfTc=
163+
github.com/gballet/go-verkle v0.0.0-20210408135335-4da43934fa91/go.mod h1:s2tVAxI5FnThDvOCzrUpNU8HxoGvFBelNLZpDEEsFuk=
158164
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
159165
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
160166
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
@@ -258,6 +264,10 @@ github.com/herumi/bls-eth-go-binary v0.0.0-20210128192016-d750c7e71022/go.mod h1
258264
github.com/herumi/bls-eth-go-binary v0.0.0-20210302070600-dfaa902c7773/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U=
259265
github.com/herumi/bls-eth-go-binary v0.0.0-20210311024029-2939a1bfdec2 h1:WYYASILSlSdBFLQRysRQFuRW7VHxyNDbmYaGo3T2PkA=
260266
github.com/herumi/bls-eth-go-binary v0.0.0-20210311024029-2939a1bfdec2/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U=
267+
github.com/herumi/bls-eth-go-binary v0.0.0-20210325004959-a24496ac0743 h1:r9ipCR8S2CsnXftdEBGBRNvd69Hmggm83eajtzsguw4=
268+
github.com/herumi/bls-eth-go-binary v0.0.0-20210325004959-a24496ac0743/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U=
269+
github.com/herumi/bls-eth-go-binary v0.0.0-20210407105559-9588dcfc7de7 h1:Q+xlIlrm3oXs+KOyDdvGo3oWkiY0DFFWD4RRCusJb2I=
270+
github.com/herumi/bls-eth-go-binary v0.0.0-20210407105559-9588dcfc7de7/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U=
261271
github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao=
262272
github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA=
263273
github.com/holiman/uint256 v1.1.1 h1:4JywC80b+/hSfljFlEBLHrrh+CIONLDz9NuFl0af4Mw=
@@ -496,6 +506,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnk
496506
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
497507
golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670 h1:gzMM0EjIYiRmJI3+jBdFuoynZlpxa2JQZsolKu09BXo=
498508
golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
509+
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w=
510+
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
499511
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
500512
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
501513
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -600,7 +612,10 @@ golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 h1:46ULzRKLh1CwgRq2dC5SlBzEq
600612
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
601613
golang.org/x/sys v0.0.0-20210319071255-635bc2c9138d h1:jbzgAvDZn8aEnytae+4ou0J0GwFZoHR0hOrTg4qH8GA=
602614
golang.org/x/sys v0.0.0-20210319071255-635bc2c9138d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
603-
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
615+
golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54 h1:rF3Ohx8DRyl8h2zw9qojyLHLhrJpEMgyPOImREEryf0=
616+
golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
617+
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 h1:F5Gozwx4I1xtr/sr/8CFbb57iKi3297KFs0QDbGN60A=
618+
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
604619
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
605620
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
606621
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

0 commit comments

Comments
 (0)