From 6507786dc2eb410a7bca013498cd37c85bfc7474 Mon Sep 17 00:00:00 2001 From: Roberto Bayardo Date: Sat, 15 Apr 2023 14:49:31 -0700 Subject: [PATCH 1/4] update kzg lib to latest --- core/types/data_blob.go | 28 +++++++++++++------------- core/types/transaction_signing_test.go | 4 ++-- core/types/transaction_test.go | 13 ++++++++---- crypto/kzg/kzg.go | 26 ++++++++++++------------ go.mod | 8 ++++---- go.sum | 22 ++++++++------------ 6 files changed, 50 insertions(+), 51 deletions(-) diff --git a/core/types/data_blob.go b/core/types/data_blob.go index 53387659706..7a72f7ee873 100644 --- a/core/types/data_blob.go +++ b/core/types/data_blob.go @@ -6,7 +6,7 @@ import ( "fmt" "io" - "github.com/crate-crypto/go-proto-danksharding-crypto/serialization" + gokzg4844 "github.com/crate-crypto/go-kzg-4844" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/crypto/kzg" @@ -51,7 +51,7 @@ func (p *KZGCommitment) UnmarshalText(text []byte) error { } func (c KZGCommitment) ComputeVersionedHash() common.Hash { - return common.Hash(kzg.KZGToVersionedHash(serialization.KZGCommitment(c))) + return common.Hash(kzg.KZGToVersionedHash(gokzg4844.KZGCommitment(c))) } // Compressed BLS12-381 G1 element @@ -267,41 +267,41 @@ func (blobs Blobs) ComputeCommitmentsAndProofs() (commitments []KZGCommitment, v cryptoCtx := kzg.CrpytoCtx() for i, blob := range blobs { - commitment, err := cryptoCtx.BlobToKZGCommitment(serialization.Blob(blob)) + commitment, err := cryptoCtx.BlobToKZGCommitment(gokzg4844.Blob(blob)) if err != nil { return nil, nil, nil, fmt.Errorf("could not convert blob to commitment: %v", err) } - proof, err := cryptoCtx.ComputeBlobKZGProof(serialization.Blob(blob), commitment) + proof, err := cryptoCtx.ComputeBlobKZGProof(gokzg4844.Blob(blob), commitment) if err != nil { return nil, nil, nil, fmt.Errorf("could not compute proof for blob: %v", err) } commitments[i] = KZGCommitment(commitment) proofs[i] = KZGProof(proof) - versionedHashes[i] = common.Hash(kzg.KZGToVersionedHash(serialization.KZGCommitment(commitment))) + versionedHashes[i] = common.Hash(kzg.KZGToVersionedHash(gokzg4844.KZGCommitment(commitment))) } return commitments, versionedHashes, proofs, nil } -func toBlobs(_blobs Blobs) []serialization.Blob { - blobs := make([]serialization.Blob, len(_blobs)) +func toBlobs(_blobs Blobs) []gokzg4844.Blob { + blobs := make([]gokzg4844.Blob, len(_blobs)) for i, _blob := range _blobs { - blobs[i] = serialization.Blob(_blob) + blobs[i] = gokzg4844.Blob(_blob) } return blobs } -func toComms(_comms BlobKzgs) []serialization.KZGCommitment { - comms := make([]serialization.KZGCommitment, len(_comms)) +func toComms(_comms BlobKzgs) []gokzg4844.KZGCommitment { + comms := make([]gokzg4844.KZGCommitment, len(_comms)) for i, _comm := range _comms { - comms[i] = serialization.KZGCommitment(_comm) + comms[i] = gokzg4844.KZGCommitment(_comm) } return comms } -func toProofs(_proofs KZGProofs) []serialization.KZGProof { - proofs := make([]serialization.KZGProof, len(_proofs)) +func toProofs(_proofs KZGProofs) []gokzg4844.KZGProof { + proofs := make([]gokzg4844.KZGProof, len(_proofs)) for i, _proof := range _proofs { - proofs[i] = serialization.KZGProof(_proof) + proofs[i] = gokzg4844.KZGProof(_proof) } return proofs } diff --git a/core/types/transaction_signing_test.go b/core/types/transaction_signing_test.go index 02d996b9e6d..fe5466084ec 100644 --- a/core/types/transaction_signing_test.go +++ b/core/types/transaction_signing_test.go @@ -21,7 +21,7 @@ import ( "math/big" "testing" - "github.com/crate-crypto/go-proto-danksharding-crypto/api" + //gokzg4844 "github.com/crate-crypto/go-kzg-4844" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" @@ -100,7 +100,7 @@ func TestEIP4844Signing(t *testing.T) { wrapData := &BlobTxWrapData{ BlobKzgs: BlobKzgs{KZGCommitment{0: 0xc0}}, Blobs: Blobs{Blob{}}, - Proofs: KZGProofs{api.ZERO_POINT}, + Proofs: KZGProofs{KZGProof{}}, } tx := NewTx(txdata, WithTxWrapData(wrapData)) tx, err := SignTx(tx, signer, key) diff --git a/core/types/transaction_test.go b/core/types/transaction_test.go index cbe8d47cb0d..6a5144ce1d6 100644 --- a/core/types/transaction_test.go +++ b/core/types/transaction_test.go @@ -28,12 +28,13 @@ import ( "testing" "time" - "github.com/crate-crypto/go-proto-danksharding-crypto/api" + gokzg4844 "github.com/crate-crypto/go-kzg-4844" "github.com/holiman/uint256" "github.com/protolambda/ztyp/view" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/kzg" "github.com/ethereum/go-ethereum/rlp" ) @@ -493,10 +494,14 @@ func TestTransactionCoding(t *testing.T) { BlobVersionedHashes: VersionedHashesView{common.HexToHash("0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014")}, }, } + cryptoCtx := kzg.CrpytoCtx() + blob := Blob{} + commitment, _ := cryptoCtx.BlobToKZGCommitment(gokzg4844.Blob(blob)) + proof, _ := cryptoCtx.ComputeBlobKZGProof(gokzg4844.Blob(blob), commitment) wrapData = &BlobTxWrapData{ - BlobKzgs: BlobKzgs{KZGCommitment{0: 0xc0}}, - Blobs: Blobs{Blob{}}, - Proofs: KZGProofs{api.ZERO_POINT}, + BlobKzgs: BlobKzgs{KZGCommitment(commitment)}, + Blobs: Blobs{Blob(blob)}, + Proofs: KZGProofs{KZGProof(proof)}, } } tx, err := SignNewTx(key, signer, txdata, WithTxWrapData(wrapData)) diff --git a/crypto/kzg/kzg.go b/crypto/kzg/kzg.go index 51c07fd1da4..d45a71e7420 100644 --- a/crypto/kzg/kzg.go +++ b/crypto/kzg/kzg.go @@ -7,8 +7,7 @@ import ( "math/big" "sync" - "github.com/crate-crypto/go-proto-danksharding-crypto/api" - "github.com/crate-crypto/go-proto-danksharding-crypto/serialization" + gokzg4844 "github.com/crate-crypto/go-kzg-4844" ) const ( @@ -23,8 +22,8 @@ type Slot uint64 type BlobsSidecar struct { BeaconBlockRoot Root BeaconBlockSlot Slot - Blobs []serialization.Blob - Proofs []serialization.KZGProof + Blobs []gokzg4844.Blob + Proofs []gokzg4844.KZGProof } const ( @@ -40,7 +39,7 @@ var ( // The value that gets returned when the `verify_kzg_proof“ precompile is called var precompileReturnValue [64]byte -var gCryptoCtx api.Context +var gCryptoCtx gokzg4844.Context var initCryptoCtx sync.Once // InitializeCrypytoCtx initializes the global context object returned via CryptoCtx @@ -48,14 +47,14 @@ func InitializeCrypytoCtx() { initCryptoCtx.Do(func() { // Initialize context to match the configurations that the // specs are using. - ctx, err := api.NewContext4096Insecure1337() + ctx, err := gokzg4844.NewContext4096Insecure1337() if err != nil { panic(fmt.Sprintf("could not create context, err : %v", err)) } gCryptoCtx = *ctx // Initialize the precompile return value - new(big.Int).SetUint64(serialization.ScalarsPerBlob).FillBytes(precompileReturnValue[:32]) - copy(precompileReturnValue[32:], api.MODULUS[:]) + new(big.Int).SetUint64(gokzg4844.ScalarsPerBlob).FillBytes(precompileReturnValue[:32]) + copy(precompileReturnValue[32:], gokzg4844.BlsModulus[:]) }) } @@ -63,7 +62,7 @@ func InitializeCrypytoCtx() { // to allow one to create and verify blob proofs. // This function is expensive to run if the crypto context isn't initialized, so it is recommended to // pre-initialize by calling InitializeCryptoCtx -func CrpytoCtx() api.Context { +func CrpytoCtx() gokzg4844.Context { InitializeCrypytoCtx() return gCryptoCtx } @@ -77,7 +76,8 @@ func PointEvaluationPrecompile(input []byte) ([]byte, error) { var versionedHash [32]byte copy(versionedHash[:], input[:32]) - var x, y [32]byte + var x gokzg4844.Scalar + var y gokzg4844.KZGProof // Evaluation point: next 32 bytes copy(x[:], input[32:64]) // Expected output: next 32 bytes @@ -86,12 +86,12 @@ func PointEvaluationPrecompile(input []byte) ([]byte, error) { // input kzg point: next 48 bytes var dataKZG [48]byte copy(dataKZG[:], input[96:144]) - if KZGToVersionedHash(serialization.KZGCommitment(dataKZG)) != VersionedHash(versionedHash) { + if KZGToVersionedHash(gokzg4844.KZGCommitment(dataKZG)) != VersionedHash(versionedHash) { return nil, errors.New("mismatched versioned hash") } // Quotient kzg: next 48 bytes - var quotientKZG [48]byte + var quotientKZG gokzg4844.Scalar copy(quotientKZG[:], input[144:PrecompileInputLength]) cryptoCtx := CrpytoCtx() @@ -106,7 +106,7 @@ func PointEvaluationPrecompile(input []byte) ([]byte, error) { } // KZGToVersionedHash implements kzg_to_versioned_hash from EIP-4844 -func KZGToVersionedHash(kzg serialization.KZGCommitment) VersionedHash { +func KZGToVersionedHash(kzg gokzg4844.KZGCommitment) VersionedHash { h := sha256.Sum256(kzg[:]) h[0] = BlobCommitmentVersionKZG diff --git a/go.mod b/go.mod index 31592876c54..d2d1c93a815 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,8 @@ require ( github.com/cespare/cp v0.1.0 github.com/cloudflare/cloudflare-go v0.14.0 github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 - github.com/consensys/gnark-crypto v0.9.1-0.20230105202408-1a7a29904a7c + github.com/consensys/gnark-crypto v0.10.0 + github.com/crate-crypto/go-kzg-4844 v0.1.0 github.com/davecgh/go-spew v1.1.1 github.com/deckarep/golang-set/v2 v2.1.0 github.com/docker/docker v1.6.2 @@ -62,15 +63,13 @@ require ( golang.org/x/crypto v0.1.0 golang.org/x/exp v0.0.0-20230206171751-46f607a40771 golang.org/x/sync v0.1.0 - golang.org/x/sys v0.5.0 + golang.org/x/sys v0.6.0 golang.org/x/text v0.7.0 golang.org/x/time v0.0.0-20220922220347-f3bd1da661af golang.org/x/tools v0.2.0 gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce ) -require github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230325161441-829bf646183d - require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 // indirect @@ -82,6 +81,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 // indirect github.com/aws/smithy-go v1.1.0 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.5.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cockroachdb/errors v1.9.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect diff --git a/go.sum b/go.sum index d3b91ad65dd..707f1162f02 100644 --- a/go.sum +++ b/go.sum @@ -71,6 +71,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.5.0 h1:NpE8frKRLGHIcEzkR+gZhiioW1+WbYV6fKwD6ZIpQT8= +github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= @@ -105,8 +107,8 @@ github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZ github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.9.1-0.20230105202408-1a7a29904a7c h1:llSLg4o9EgH3SrXky+Q5BqEYqV76NGKo07K5Ps2pIKo= -github.com/consensys/gnark-crypto v0.9.1-0.20230105202408-1a7a29904a7c/go.mod h1:CkbdF9hbRidRJYMRzmfX8TMOr95I2pYXRHF18MzRrvA= +github.com/consensys/gnark-crypto v0.10.0 h1:zRh22SR7o4K35SoNqouS9J/TKHTyU2QWaj5ldehyXtA= +github.com/consensys/gnark-crypto v0.10.0/go.mod h1:Iq/P3HHl0ElSjsg2E1gsMwhAyxnxoKK5nVyZKd+/KhU= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -116,16 +118,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHH github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-ipa v0.0.0-20220523130400-f11357ae11c7 h1:6IrxszG5G+O7zhtkWxq6+unVvnrm1fqV2Pe+T95DUzw= github.com/crate-crypto/go-ipa v0.0.0-20220523130400-f11357ae11c7/go.mod h1:gFnFS95y8HstDP6P9pPwzrxOOC5TRDkwbM+ao15ChAI= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230312204821-9a244123c812 h1:fvpzeIO449sb44y2Nqd0MVziJHvp0OFCG66t3ZjuYqU= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230312204821-9a244123c812/go.mod h1:ZNzUrSnC7IXKtQWnROzWVfQSivVSCPkMtwXekLDj4qI= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230322232037-070b0b94db8a h1:LWAQVosZamsfhvO14tfYNMluSHTWXF6AKa+9DmaK7Q0= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230322232037-070b0b94db8a/go.mod h1:ZNzUrSnC7IXKtQWnROzWVfQSivVSCPkMtwXekLDj4qI= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230322232628-fbbf54e10131 h1:/ZBvP82vNl+xWYfcAHewbjRkq1MS2l0DKyeIWO4wgME= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230322232628-fbbf54e10131/go.mod h1:ZNzUrSnC7IXKtQWnROzWVfQSivVSCPkMtwXekLDj4qI= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230322233247-22e22c6f68e6 h1:KguBkZjb4BXvSmVxjugrmJQyGjZqZHJfGHMmHgZn6ls= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230322233247-22e22c6f68e6/go.mod h1:ZNzUrSnC7IXKtQWnROzWVfQSivVSCPkMtwXekLDj4qI= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230325161441-829bf646183d h1:rFbq+iU1Evnzs//EjFY7bUcIn4+/gdczDfx+PSMmvTE= -github.com/crate-crypto/go-proto-danksharding-crypto v0.0.0-20230325161441-829bf646183d/go.mod h1:ZNzUrSnC7IXKtQWnROzWVfQSivVSCPkMtwXekLDj4qI= +github.com/crate-crypto/go-kzg-4844 v0.1.0 h1:2PXr2wKBNTmSsoYLCmaNg5Z6uQUf7LiUAsnDbTfq+0M= +github.com/crate-crypto/go-kzg-4844 v0.1.0/go.mod h1:SBP7ikXEgDnUPONgm33HtuDZEDtWa3L4QtN1ocJSEQ4= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= @@ -732,8 +726,8 @@ golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= From c5d86c0dd4115a41f17bfbcb0ef5f44c6fd0477a Mon Sep 17 00:00:00 2001 From: Roberto Bayardo Date: Sat, 15 Apr 2023 15:12:12 -0700 Subject: [PATCH 2/4] add check of len(proofs) per free the blobs --- core/types/data_blob.go | 5 +++-- core/types/transaction_signing_test.go | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/types/data_blob.go b/core/types/data_blob.go index 7a72f7ee873..80cbe174245 100644 --- a/core/types/data_blob.go +++ b/core/types/data_blob.go @@ -349,8 +349,9 @@ func (b *BlobTxWrapData) validateBlobTransactionWrapper(inner TxData) error { l1 := len(b.BlobKzgs) l2 := len(blobTx.Message.BlobVersionedHashes) l3 := len(b.Blobs) - if l1 != l2 || l2 != l3 { - return fmt.Errorf("lengths don't match %v %v %v", l1, l2, l3) + l4 := len(b.Proofs) + if l1 != l2 || 11 != l3 || l1 != l4 { + return fmt.Errorf("lengths don't match %v %v %v %v", l1, l2, l3, l4) } // the following check isn't strictly necessary as it would be caught by data gas processing // (and hence it is not explicitly in the spec for this function), but it doesn't hurt to fail diff --git a/core/types/transaction_signing_test.go b/core/types/transaction_signing_test.go index fe5466084ec..7ba63498541 100644 --- a/core/types/transaction_signing_test.go +++ b/core/types/transaction_signing_test.go @@ -21,7 +21,6 @@ import ( "math/big" "testing" - //gokzg4844 "github.com/crate-crypto/go-kzg-4844" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" From 366dd634f3b15ab0718f476700fe1a3ef0172ba5 Mon Sep 17 00:00:00 2001 From: Roberto Bayardo Date: Sat, 15 Apr 2023 15:47:51 -0700 Subject: [PATCH 3/4] fix type / typo bugs --- core/types/data_blob.go | 2 +- crypto/kzg/kzg.go | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/core/types/data_blob.go b/core/types/data_blob.go index 80cbe174245..d823e3d40a8 100644 --- a/core/types/data_blob.go +++ b/core/types/data_blob.go @@ -350,7 +350,7 @@ func (b *BlobTxWrapData) validateBlobTransactionWrapper(inner TxData) error { l2 := len(blobTx.Message.BlobVersionedHashes) l3 := len(b.Blobs) l4 := len(b.Proofs) - if l1 != l2 || 11 != l3 || l1 != l4 { + if l1 != l2 || l1 != l3 || l1 != l4 { return fmt.Errorf("lengths don't match %v %v %v %v", l1, l2, l3, l4) } // the following check isn't strictly necessary as it would be caught by data gas processing diff --git a/crypto/kzg/kzg.go b/crypto/kzg/kzg.go index d45a71e7420..4e8a3163ae4 100644 --- a/crypto/kzg/kzg.go +++ b/crypto/kzg/kzg.go @@ -76,8 +76,7 @@ func PointEvaluationPrecompile(input []byte) ([]byte, error) { var versionedHash [32]byte copy(versionedHash[:], input[:32]) - var x gokzg4844.Scalar - var y gokzg4844.KZGProof + var x, y gokzg4844.Scalar // Evaluation point: next 32 bytes copy(x[:], input[32:64]) // Expected output: next 32 bytes @@ -91,11 +90,11 @@ func PointEvaluationPrecompile(input []byte) ([]byte, error) { } // Quotient kzg: next 48 bytes - var quotientKZG gokzg4844.Scalar + var quotientKZG gokzg4844.KZGProof copy(quotientKZG[:], input[144:PrecompileInputLength]) cryptoCtx := CrpytoCtx() - err := cryptoCtx.VerifyKZGProof(dataKZG, quotientKZG, x, y) + err := cryptoCtx.VerifyKZGProof(dataKZG, x, y, quotientKZG) if err != nil { return nil, fmt.Errorf("verify_kzg_proof error: %v", err) } From 766ada01652b656704199c7b2f5099101821a56d Mon Sep 17 00:00:00 2001 From: Roberto Bayardo Date: Sat, 15 Apr 2023 16:25:51 -0700 Subject: [PATCH 4/4] use test factory for blob wrapper test data --- core/types/transaction_signing_test.go | 29 +++++++---------- core/types/transaction_test.go | 43 ++++++++++++++------------ 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/core/types/transaction_signing_test.go b/core/types/transaction_signing_test.go index 7ba63498541..701261c631d 100644 --- a/core/types/transaction_signing_test.go +++ b/core/types/transaction_signing_test.go @@ -84,23 +84,18 @@ func TestEIP4844Signing(t *testing.T) { addr := crypto.PubkeyToAddress(key.PublicKey) signer := NewDankSigner(big.NewInt(18)) - txdata := &SignedBlobTx{ - Message: BlobTxMessage{ - Nonce: view.Uint64View(0), - Gas: view.Uint64View(123457), - To: AddressOptionalSSZ{Address: (*AddressSSZ)(&addr)}, - GasTipCap: view.Uint256View(*uint256.NewInt(42)), - GasFeeCap: view.Uint256View(*uint256.NewInt(10)), - MaxFeePerDataGas: view.Uint256View(*uint256.NewInt(10)), - Value: view.Uint256View(*uint256.NewInt(10)), - BlobVersionedHashes: VersionedHashesView{common.HexToHash("0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014")}, - }, - } - wrapData := &BlobTxWrapData{ - BlobKzgs: BlobKzgs{KZGCommitment{0: 0xc0}}, - Blobs: Blobs{Blob{}}, - Proofs: KZGProofs{KZGProof{}}, - } + msg := BlobTxMessage{ + Nonce: view.Uint64View(0), + Gas: view.Uint64View(123457), + To: AddressOptionalSSZ{Address: (*AddressSSZ)(&addr)}, + GasTipCap: view.Uint256View(*uint256.NewInt(42)), + GasFeeCap: view.Uint256View(*uint256.NewInt(10)), + MaxFeePerDataGas: view.Uint256View(*uint256.NewInt(10)), + Value: view.Uint256View(*uint256.NewInt(10)), + } + var wrapData TxWrapData + wrapData, msg.BlobVersionedHashes = oneEmptyBlobWrapData() + txdata := &SignedBlobTx{Message: msg} tx := NewTx(txdata, WithTxWrapData(wrapData)) tx, err := SignTx(tx, signer, key) if err != nil { diff --git a/core/types/transaction_test.go b/core/types/transaction_test.go index 6a5144ce1d6..39af48fd23e 100644 --- a/core/types/transaction_test.go +++ b/core/types/transaction_test.go @@ -78,6 +78,21 @@ var ( ) ) +// Returns a wrapper consisting of a single blob of all zeros that passes validation along with its +// versioned hash. +func oneEmptyBlobWrapData() (wrap *BlobTxWrapData, versionedHashes VersionedHashesView) { + cryptoCtx := kzg.CrpytoCtx() + blob := Blob{} + commitment, _ := cryptoCtx.BlobToKZGCommitment(gokzg4844.Blob(blob)) + proof, _ := cryptoCtx.ComputeBlobKZGProof(gokzg4844.Blob(blob), commitment) + wrapData := &BlobTxWrapData{ + BlobKzgs: BlobKzgs{KZGCommitment(commitment)}, + Blobs: Blobs{Blob(blob)}, + Proofs: KZGProofs{KZGProof(proof)}, + } + return wrapData, VersionedHashesView{common.Hash(kzg.KZGToVersionedHash(gokzg4844.KZGCommitment(wrapData.BlobKzgs[0])))} +} + func TestDecodeEmptyTypedTx(t *testing.T) { input := []byte{0x80} var tx Transaction @@ -483,26 +498,16 @@ func TestTransactionCoding(t *testing.T) { AccessList: accesses, } case 6: - txdata = &SignedBlobTx{ - Message: BlobTxMessage{ - ChainID: view.Uint256View(*uint256.NewInt(1)), - Nonce: view.Uint64View(i), - Gas: view.Uint64View(123457), - GasTipCap: view.Uint256View(*uint256.NewInt(42)), - GasFeeCap: view.Uint256View(*uint256.NewInt(10)), - AccessList: AccessListView(accesses), - BlobVersionedHashes: VersionedHashesView{common.HexToHash("0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014")}, - }, - } - cryptoCtx := kzg.CrpytoCtx() - blob := Blob{} - commitment, _ := cryptoCtx.BlobToKZGCommitment(gokzg4844.Blob(blob)) - proof, _ := cryptoCtx.ComputeBlobKZGProof(gokzg4844.Blob(blob), commitment) - wrapData = &BlobTxWrapData{ - BlobKzgs: BlobKzgs{KZGCommitment(commitment)}, - Blobs: Blobs{Blob(blob)}, - Proofs: KZGProofs{KZGProof(proof)}, + msg := BlobTxMessage{ + ChainID: view.Uint256View(*uint256.NewInt(1)), + Nonce: view.Uint64View(i), + Gas: view.Uint64View(123457), + GasTipCap: view.Uint256View(*uint256.NewInt(42)), + GasFeeCap: view.Uint256View(*uint256.NewInt(10)), + AccessList: AccessListView(accesses), } + wrapData, msg.BlobVersionedHashes = oneEmptyBlobWrapData() + txdata = &SignedBlobTx{Message: msg} } tx, err := SignNewTx(key, signer, txdata, WithTxWrapData(wrapData)) if err != nil {