Skip to content

Commit a45a6e3

Browse files
authored
kz4844: pass blobs by ref (#13624)
Performance optimization. Relies on crate-crypto/go-kzg-4844#6. See also ethereum/go-ethereum#29050
1 parent 113a320 commit a45a6e3

File tree

9 files changed

+30
-31
lines changed

9 files changed

+30
-31
lines changed

cl/persistence/blob_storage/blob_db.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,9 +295,9 @@ func VerifyAgainstIdentifiersAndInsertIntoTheBlobStore(ctx context.Context, stor
295295
wg.Add(1)
296296
go func(sds *sidecarsPayload) {
297297
defer wg.Done()
298-
blobs := make([]gokzg4844.Blob, len(sds.sidecars))
298+
blobs := make([]gokzg4844.BlobRef, len(sds.sidecars))
299299
for i, sidecar := range sds.sidecars {
300-
blobs[i] = gokzg4844.Blob(sidecar.Blob)
300+
blobs[i] = sidecar.Blob[:]
301301
}
302302
kzgCommitments := make([]gokzg4844.KZGCommitment, len(sds.sidecars))
303303
for i, sidecar := range sds.sidecars {

cl/phase1/network/services/blob_sidecar_service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ func (b *blobSidecarService) verifyAndStoreBlobSidecar(msg *cltypes.BlobSidecar)
141141
}
142142

143143
start := time.Now()
144-
if err := kzgCtx.VerifyBlobKZGProof(gokzg4844.Blob(msg.Blob), gokzg4844.KZGCommitment(msg.KzgCommitment), gokzg4844.KZGProof(msg.KzgProof)); err != nil {
144+
if err := kzgCtx.VerifyBlobKZGProof(msg.Blob[:], gokzg4844.KZGCommitment(msg.KzgCommitment), gokzg4844.KZGProof(msg.KzgProof)); err != nil {
145145
return fmt.Errorf("blob KZG proof verification failed: %v", err)
146146
}
147147

core/types/blob_tx_wrapper.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -223,13 +223,13 @@ func (blobs Blobs) ComputeCommitmentsAndProofs() (commitments []KZGCommitment, v
223223
versionedHashes = make([]libcommon.Hash, len(blobs))
224224

225225
kzgCtx := libkzg.Ctx()
226-
for i, blob := range blobs {
227-
commitment, err := kzgCtx.BlobToKZGCommitment(gokzg4844.Blob(blob), 1 /*numGoRoutines*/)
226+
for i := 0; i < len(blobs); i++ {
227+
commitment, err := kzgCtx.BlobToKZGCommitment(blobs[i][:], 1 /*numGoRoutines*/)
228228
if err != nil {
229229
return nil, nil, nil, fmt.Errorf("could not convert blob to commitment: %v", err)
230230
}
231231

232-
proof, err := kzgCtx.ComputeBlobKZGProof(gokzg4844.Blob(blob), commitment, 1 /*numGoRoutnes*/)
232+
proof, err := kzgCtx.ComputeBlobKZGProof(blobs[i][:], commitment, 1 /*numGoRoutnes*/)
233233
if err != nil {
234234
return nil, nil, nil, fmt.Errorf("could not compute proof for blob: %v", err)
235235
}
@@ -241,10 +241,10 @@ func (blobs Blobs) ComputeCommitmentsAndProofs() (commitments []KZGCommitment, v
241241
return commitments, versionedHashes, proofs, nil
242242
}
243243

244-
func toBlobs(_blobs Blobs) []gokzg4844.Blob {
245-
blobs := make([]gokzg4844.Blob, len(_blobs))
244+
func toBlobs(_blobs Blobs) []gokzg4844.BlobRef {
245+
blobs := make([]gokzg4844.BlobRef, len(_blobs))
246246
for i, _blob := range _blobs {
247-
blobs[i] = gokzg4844.Blob(_blob)
247+
blobs[i] = _blob[:]
248248
}
249249
return blobs
250250
}

core/types/typestest/test_data.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ func MakeBlobTxnRlp() ([]byte, []gokzg4844.KZGCommitment) {
3737

3838
var err error
3939
proofsRlpPrefix := hexutility.MustDecodeHex("f862")
40-
commitment0, _ := kzg.Ctx().BlobToKZGCommitment(blob0, 0)
41-
commitment1, _ := kzg.Ctx().BlobToKZGCommitment(blob1, 0)
40+
commitment0, _ := kzg.Ctx().BlobToKZGCommitment(blob0[:], 0)
41+
commitment1, _ := kzg.Ctx().BlobToKZGCommitment(blob1[:], 0)
4242

43-
proof0, err := kzg.Ctx().ComputeBlobKZGProof(blob0, commitment0, 0)
43+
proof0, err := kzg.Ctx().ComputeBlobKZGProof(blob0[:], commitment0, 0)
4444
if err != nil {
4545
fmt.Println("error", err)
4646
}
47-
proof1, err := kzg.Ctx().ComputeBlobKZGProof(blob1, commitment1, 0)
47+
proof1, err := kzg.Ctx().ComputeBlobKZGProof(blob1[:], commitment1, 0)
4848
if err != nil {
4949
fmt.Println("error", err)
5050
}

erigon-lib/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.22.0
44

55
replace (
66
github.com/anacrolix/torrent => github.com/erigontech/torrent v1.54.3-alpha-1
7+
github.com/crate-crypto/go-kzg-4844 => github.com/erigontech/go-kzg-4844 v0.0.0-20250130131058-ce13be60bc86
78
github.com/holiman/bloomfilter/v2 => github.com/AskAlexSharov/bloomfilter/v2 v2.0.9
89
)
910

@@ -25,7 +26,7 @@ require (
2526
github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500
2627
github.com/containerd/cgroups/v3 v3.0.3
2728
github.com/crate-crypto/go-ipa v0.0.0-20221111143132-9aa5d42120bc
28-
github.com/crate-crypto/go-kzg-4844 v0.7.0
29+
github.com/crate-crypto/go-kzg-4844 v1.1.0
2930
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0
3031
github.com/edsrzf/mmap-go v1.1.0
3132
github.com/elastic/go-freelru v0.13.0
@@ -101,7 +102,7 @@ require (
101102
github.com/cespare/xxhash/v2 v2.3.0 // indirect
102103
github.com/cilium/ebpf v0.11.0 // indirect
103104
github.com/consensys/bavard v0.1.13 // indirect
104-
github.com/consensys/gnark-crypto v0.12.1 // indirect
105+
github.com/consensys/gnark-crypto v0.13.0 // indirect
105106
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
106107
github.com/davecgh/go-spew v1.1.1
107108
github.com/docker/go-units v0.5.0 // indirect
@@ -144,7 +145,6 @@ require (
144145
github.com/prometheus/common v0.55.0 // indirect
145146
github.com/prometheus/procfs v0.15.1 // indirect
146147
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
147-
github.com/rogpeppe/go-internal v1.12.0 // indirect
148148
github.com/shoenig/go-m1cpu v0.1.6 // indirect
149149
github.com/sirupsen/logrus v1.9.3 // indirect
150150
github.com/tklauser/go-sysconf v0.3.14 // indirect

erigon-lib/go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,14 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
116116
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
117117
github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ=
118118
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
119-
github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M=
120-
github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY=
119+
github.com/consensys/gnark-crypto v0.13.0 h1:VPULb/v6bbYELAPTDFINEVaMTTybV5GLxDdcjnS+4oc=
120+
github.com/consensys/gnark-crypto v0.13.0/go.mod h1:wKqwsieaKPThcFkHe0d0zMsbHEUWFmZcG7KBCse210o=
121121
github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
122122
github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
123123
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
124124
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
125125
github.com/crate-crypto/go-ipa v0.0.0-20221111143132-9aa5d42120bc h1:mtR7MuscVeP/s0/ERWA2uSr5QOrRYy1pdvZqG1USfXI=
126126
github.com/crate-crypto/go-ipa v0.0.0-20221111143132-9aa5d42120bc/go.mod h1:gFnFS95y8HstDP6P9pPwzrxOOC5TRDkwbM+ao15ChAI=
127-
github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA=
128-
github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc=
129127
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
130128
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
131129
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -154,6 +152,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
154152
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
155153
github.com/erigontech/erigon-snapshot v1.3.1-0.20250121111444-6cc4c0c1fb89 h1:7NYivXuTuHccvDDpaeVid3Sp21T7VFcNVWyJtKaYe6Y=
156154
github.com/erigontech/erigon-snapshot v1.3.1-0.20250121111444-6cc4c0c1fb89/go.mod h1:ooHlCl+eEYzebiPu+FP6Q6SpPUeMADn8Jxabv3IKb9M=
155+
github.com/erigontech/go-kzg-4844 v0.0.0-20250130131058-ce13be60bc86 h1:UKcIbFZUGIKzK4aQbkv/dYiOVxZSUuD3zKadhmfwdwU=
156+
github.com/erigontech/go-kzg-4844 v0.0.0-20250130131058-ce13be60bc86/go.mod h1:JolLjpSff1tCCJKaJx4psrlEdlXuJEC996PL3tTAFks=
157157
github.com/erigontech/interfaces v0.0.0-20241120074553-214b5fd396ed h1:un44S8Tuol4LBIC6R94t93GShM53BYjz7GsNPziDLQ8=
158158
github.com/erigontech/interfaces v0.0.0-20241120074553-214b5fd396ed/go.mod h1:N7OUkhkcagp9+7yb4ycHsG2VWCOmuJ1ONBecJshxtLE=
159159
github.com/erigontech/mdbx-go v0.38.4 h1:S9T7mTe9KPcFe4dOoOtVdI6gPzht9y7wMnYfUBgrQLo=

go.mod

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ replace github.com/erigontech/erigon-lib => ./erigon-lib
66

77
replace (
88
github.com/anacrolix/torrent => github.com/erigontech/torrent v1.54.3-alpha-1
9+
github.com/crate-crypto/go-kzg-4844 => github.com/erigontech/go-kzg-4844 v0.0.0-20250130131058-ce13be60bc86
910
github.com/holiman/bloomfilter/v2 => github.com/AskAlexSharov/bloomfilter/v2 v2.0.9
1011
)
1112

@@ -27,8 +28,8 @@ require (
2728
github.com/anacrolix/torrent v1.52.6-0.20231201115409-7ea994b6bbd8
2829
github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500
2930
github.com/cenkalti/backoff/v4 v4.2.1
30-
github.com/consensys/gnark-crypto v0.12.1
31-
github.com/crate-crypto/go-kzg-4844 v0.7.0
31+
github.com/consensys/gnark-crypto v0.13.0
32+
github.com/crate-crypto/go-kzg-4844 v1.1.0
3233
github.com/davecgh/go-spew v1.1.1
3334
github.com/deckarep/golang-set v1.8.0
3435
github.com/deckarep/golang-set/v2 v2.3.1

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht
200200
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
201201
github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ=
202202
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
203-
github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M=
204-
github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY=
203+
github.com/consensys/gnark-crypto v0.13.0 h1:VPULb/v6bbYELAPTDFINEVaMTTybV5GLxDdcjnS+4oc=
204+
github.com/consensys/gnark-crypto v0.13.0/go.mod h1:wKqwsieaKPThcFkHe0d0zMsbHEUWFmZcG7KBCse210o=
205205
github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
206206
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
207207
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
@@ -218,8 +218,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB
218218
github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
219219
github.com/crate-crypto/go-ipa v0.0.0-20221111143132-9aa5d42120bc h1:mtR7MuscVeP/s0/ERWA2uSr5QOrRYy1pdvZqG1USfXI=
220220
github.com/crate-crypto/go-ipa v0.0.0-20221111143132-9aa5d42120bc/go.mod h1:gFnFS95y8HstDP6P9pPwzrxOOC5TRDkwbM+ao15ChAI=
221-
github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA=
222-
github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc=
223221
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
224222
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
225223
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -271,6 +269,8 @@ github.com/erigontech/erigon-snapshot v1.3.1-0.20250121111444-6cc4c0c1fb89 h1:7N
271269
github.com/erigontech/erigon-snapshot v1.3.1-0.20250121111444-6cc4c0c1fb89/go.mod h1:ooHlCl+eEYzebiPu+FP6Q6SpPUeMADn8Jxabv3IKb9M=
272270
github.com/erigontech/erigonwatch v0.0.0-20240718131902-b6576bde1116 h1:KCFa2uXEfZoBjV4buzjWmCmoqVLXiGCq0ZmQ2OjeRvQ=
273271
github.com/erigontech/erigonwatch v0.0.0-20240718131902-b6576bde1116/go.mod h1:8vQ+VjvLu2gkPs8EwdPrOTAAo++WuLuBi54N7NuAF0I=
272+
github.com/erigontech/go-kzg-4844 v0.0.0-20250130131058-ce13be60bc86 h1:UKcIbFZUGIKzK4aQbkv/dYiOVxZSUuD3zKadhmfwdwU=
273+
github.com/erigontech/go-kzg-4844 v0.0.0-20250130131058-ce13be60bc86/go.mod h1:JolLjpSff1tCCJKaJx4psrlEdlXuJEC996PL3tTAFks=
274274
github.com/erigontech/mdbx-go v0.38.4 h1:S9T7mTe9KPcFe4dOoOtVdI6gPzht9y7wMnYfUBgrQLo=
275275
github.com/erigontech/mdbx-go v0.38.4/go.mod h1:IcOLQDPw3VM/asP6T5JVPPN4FHHgJtY16XfYjzWKVNI=
276276
github.com/erigontech/secp256k1 v1.1.0 h1:mO3YJMUSoASE15Ya//SoHiisptUhdXExuMUN1M0X9qY=

txnprovider/txpool/pool.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -853,12 +853,10 @@ func (p *TxPool) AddRemoteTxns(_ context.Context, newTxns TxnSlots) {
853853
}
854854
}
855855

856-
func toBlobs(_blobs [][]byte) []gokzg4844.Blob {
857-
blobs := make([]gokzg4844.Blob, len(_blobs))
856+
func toBlobs(_blobs [][]byte) []gokzg4844.BlobRef {
857+
blobs := make([]gokzg4844.BlobRef, len(_blobs))
858858
for i, _blob := range _blobs {
859-
var b gokzg4844.Blob
860-
copy(b[:], _blob)
861-
blobs[i] = b
859+
blobs[i] = _blob
862860
}
863861
return blobs
864862
}

0 commit comments

Comments
 (0)