From 24c2e0d2cbae729eac52e616256a35275fceec1f Mon Sep 17 00:00:00 2001 From: Benjamin Hunter Date: Mon, 11 Nov 2024 20:40:34 -0500 Subject: [PATCH 1/7] Set txs to empty list --- miner/worker.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/miner/worker.go b/miner/worker.go index 2a69317..889ee72 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -1525,16 +1525,16 @@ func (w *worker) fillTransactions(interrupt *atomic.Int32, env *environment, con // Fill the block with all available pending transactions. if len(localPlainTxs) > 0 || len(localBlobTxs) > 0 || len(constraints) > 0 { - plainTxs := newTransactionsByPriceAndNonce(env.signer, localPlainTxs, nil, nil, env.header.BaseFee) - blobTxs := newTransactionsByPriceAndNonce(env.signer, localBlobTxs, nil, nil, env.header.BaseFee) + plainTxs := newTransactionsByPriceAndNonce(env.signer, make(map[common.Address][]*txpool.LazyTransaction), nil, nil, env.header.BaseFee) + blobTxs := newTransactionsByPriceAndNonce(env.signer, make(map[common.Address][]*txpool.LazyTransaction), nil, nil, env.header.BaseFee) if err := w.commitTransactions(env, plainTxs, blobTxs, constraints, interrupt); err != nil { return nil, nil, nil, err } } if len(remotePlainTxs) > 0 || len(remoteBlobTxs) > 0 || len(constraints) > 0 { - plainTxs := newTransactionsByPriceAndNonce(env.signer, remotePlainTxs, nil, nil, env.header.BaseFee) - blobTxs := newTransactionsByPriceAndNonce(env.signer, remoteBlobTxs, nil, nil, env.header.BaseFee) + plainTxs := newTransactionsByPriceAndNonce(env.signer, make(map[common.Address][]*txpool.LazyTransaction), nil, nil, env.header.BaseFee) + blobTxs := newTransactionsByPriceAndNonce(env.signer, make(map[common.Address][]*txpool.LazyTransaction), nil, nil, env.header.BaseFee) if err := w.commitTransactions(env, plainTxs, blobTxs, constraints, interrupt); err != nil { return nil, nil, nil, err From 5d09ff3905b46074cad2d8d3e28ff1ed9a46aed1 Mon Sep 17 00:00:00 2001 From: Benjamin Hunter Date: Tue, 12 Nov 2024 07:11:39 -0500 Subject: [PATCH 2/7] Add flag --- cmd/geth/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 0520205..f5a00b9 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -183,6 +183,7 @@ var ( utils.BuilderDiscardRevertibleTxOnErr, utils.BuilderEnableCancellations, utils.BuilderBlockProcessorURL, + utils.BuilderVerifyConstraints, } rpcFlags = []cli.Flag{ From ca86a7c9b9eb10670891d98f41b46fa7d436e0bc Mon Sep 17 00:00:00 2001 From: Benjamin Hunter Date: Tue, 12 Nov 2024 07:14:30 -0500 Subject: [PATCH 3/7] Move logic behind flag --- builder/builder.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/builder/builder.go b/builder/builder.go index a35ee1b..2b20594 100644 --- a/builder/builder.go +++ b/builder/builder.go @@ -374,12 +374,13 @@ func (b *Builder) subscribeToRelayForConstraints(relayBaseEndpoint string) error log.Info(fmt.Sprintf("Received %d new constraints", len(constraintsSigned))) for _, constraint := range constraintsSigned { - if !slices.Contains(b.slotConstraintsPubkeys, constraint.Message.Pubkey) { - log.Warn("Received constraint from unauthorized pubkey", "pubkey", constraint.Message.Pubkey) - continue - } if b.verifyConstraints { + if !slices.Contains(b.slotConstraintsPubkeys, constraint.Message.Pubkey) { + log.Warn("Received constraint from unauthorized pubkey", "pubkey", constraint.Message.Pubkey) + continue + } + valid, err := constraint.VerifySignature(constraint.Message.Pubkey, b.GetConstraintsDomain()) if err != nil || !valid { log.Error("Failed to verify constraint signature", "err", err) From 70d77b12a9a0a9096bd0bc0cd9eb9e3a067219d1 Mon Sep 17 00:00:00 2001 From: Benjamin Hunter Date: Wed, 13 Nov 2024 10:20:43 +0700 Subject: [PATCH 4/7] Subsidize in payment tx --- miner/worker.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/miner/worker.go b/miner/worker.go index 889ee72..a63e5f9 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -2385,8 +2385,11 @@ func (w *worker) proposerTxCommit(env *environment, validatorCoinbase *common.Ad return errors.New("builder balance decreased") } + availableFunds = big.NewInt(0.1e18) // subsidize 0.1 ETH. + env.gasPool.AddGas(reserve.reservedGas) chainData := chainData{w.chainConfig, w.chain, w.blockList} + _, err := insertPayoutTx(env, sender, *validatorCoinbase, reserve.reservedGas, reserve.isEOA, availableFunds, w.config.BuilderTxSigningKey, chainData) if err != nil { return err From 40e997ecbcd24fac032fd43f38a5b0c8ba488086 Mon Sep 17 00:00:00 2001 From: Benjamin Hunter Date: Wed, 13 Nov 2024 11:08:26 +0700 Subject: [PATCH 5/7] Update --- builder/builder.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/builder.go b/builder/builder.go index 97f9f83..086ba8d 100644 --- a/builder/builder.go +++ b/builder/builder.go @@ -371,7 +371,7 @@ func (b *Builder) subscribeToRelayForConstraints(relayBaseEndpoint string) error continue } - log.Info(fmt.Sprintf("Received %d new constraints", len(constraintsSigned))) + log.Info(fmt.Sprintf("Received %d new constraints from %s", len(constraintsSigned), relayBaseEndpoint)) for _, constraint := range constraintsSigned { From 68212fd80083447a0e15a605c1178368d4ac873c Mon Sep 17 00:00:00 2001 From: Benjamin Hunter Date: Wed, 13 Nov 2024 14:21:12 +0700 Subject: [PATCH 6/7] Only build if constraints are present --- miner/worker.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/miner/worker.go b/miner/worker.go index a63e5f9..840cd47 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -1394,7 +1394,7 @@ func (w *worker) fillTransactionsSelectAlgo(interrupt *atomic.Int32, env *enviro if len(constraints) > 0 { blockBundles, allBundles, mempoolTxHashes, err = w.fillTransactions(interrupt, env, constraints) } else { - blockBundles, allBundles, usedSbundles, mempoolTxHashes, err = w.fillTransactionsAlgoWorker(interrupt, env) + return nil, nil, nil, nil, errors.New("constraints are empty") } return blockBundles, allBundles, usedSbundles, mempoolTxHashes, err @@ -1453,6 +1453,7 @@ func (w *worker) fillTransactions(interrupt *atomic.Int32, env *environment, con signerAndNonceOfConstraints[from] = tx.Nonce() } + for sender, lazyTxs := range pendingPlainTxs { common.Filter(&lazyTxs, func(lazyTx *txpool.LazyTransaction) bool { if nonce, ok := signerAndNonceOfConstraints[sender]; ok { From 2e6b73ae3dca0c532914c115c5168a1235e3b282 Mon Sep 17 00:00:00 2001 From: Benjamin Hunter Date: Wed, 13 Nov 2024 14:35:42 +0700 Subject: [PATCH 7/7] Fix panic --- miner/worker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/miner/worker.go b/miner/worker.go index 840cd47..e36e2ae 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -1149,7 +1149,7 @@ func (w *worker) commitTransactions(env *environment, plainTxs, blobTxs *transac // since by assumption it is not nonce-conflicting. tx := lazyTx.Resolve() if tx == nil { - log.Trace("Ignoring evicted transaction", "hash", candidate.tx.Hash()) + log.Trace("Ignoring evicted transaction") txs.Pop() continue }