Skip to content

Commit 0ef18f8

Browse files
authored
Fix bundle 0 (#18)
## 📝 Summary * update to the latest go-utils (allows blockNumber = 0 and blockNumber = null) * fixes bug when handling bundle with replacementUuid that was sent to the local endpoint ## ⛱ Motivation and Context <!--- Why is this change required? What problem does it solve? --> ## 📚 References <!-- Any interesting external links to documentation, articles, tweets which add value to the PR --> --- ## ✅ I have run these commands * [ ] `make lint` * [ ] `make test` * [ ] `go mod tidy`
1 parent b089b7c commit 0ef18f8

File tree

6 files changed

+45
-11
lines changed

6 files changed

+45
-11
lines changed

cmd/test-tx-sender/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"os"
1111

1212
"github.com/ethereum/go-ethereum/common/hexutil"
13-
"github.com/ethereum/go-ethereum/rpc"
1413
"github.com/flashbots/go-utils/rpctypes"
1514
"github.com/flashbots/go-utils/signature"
1615
"github.com/flashbots/tdx-orderflow-proxy/proxy"
@@ -102,10 +101,11 @@ func main() {
102101
replacementUUIDTyped := uuid.New()
103102
repacementUUID := replacementUUIDTyped.String()
104103
slog.Info("Using the following replacement UUID", "value", repacementUUID)
104+
blockNumber := hexutil.Uint64(block)
105105
bundleArgs := rpctypes.EthSendBundleArgs{
106106
Txs: []hexutil.Bytes{testTx},
107107
ReplacementUUID: &repacementUUID,
108-
BlockNumber: rpc.BlockNumber(block), //nolint:gosec
108+
BlockNumber: &blockNumber,
109109
}
110110

111111
bundleHash, bundleUUID, err := bundleArgs.Validate()

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/VictoriaMetrics/metrics v1.35.1
99
github.com/cenkalti/backoff v2.2.1+incompatible
1010
github.com/ethereum/go-ethereum v1.15.2
11-
github.com/flashbots/go-utils v0.8.2
11+
github.com/flashbots/go-utils v0.8.4-0.20250314133512-c61cce7f9d3f
1212
github.com/google/uuid v1.6.0
1313
github.com/hashicorp/golang-lru/v2 v2.0.7
1414
github.com/stretchr/testify v1.9.0

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cn
3838
github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk=
3939
github.com/flashbots/go-utils v0.8.2 h1:8JUKd9Cv1CTcp63V03ya+47nflTwBEqZq357iwW4fxQ=
4040
github.com/flashbots/go-utils v0.8.2/go.mod h1:Lo/nrlC+q8ANgT3e6MKALIJCU+V9qTSgNtoLk/q1uIw=
41+
github.com/flashbots/go-utils v0.8.3 h1:SRRer7bcQuPyVvKg+CaZtXu9VllYg3q9I9fRN+HilEg=
42+
github.com/flashbots/go-utils v0.8.3/go.mod h1:Lo/nrlC+q8ANgT3e6MKALIJCU+V9qTSgNtoLk/q1uIw=
43+
github.com/flashbots/go-utils v0.8.4-0.20250314133512-c61cce7f9d3f h1:wQVYAr5LVFu9bKa3zzRRSOjZUF27/4D6FWxvhoVcQGE=
44+
github.com/flashbots/go-utils v0.8.4-0.20250314133512-c61cce7f9d3f/go.mod h1:Lo/nrlC+q8ANgT3e6MKALIJCU+V9qTSgNtoLk/q1uIw=
4145
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
4246
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
4347
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=

proxy/receiver_api.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,18 @@ func (prx *ReceiverProxy) EthSendBundle(ctx context.Context, ethSendBundle rpcty
126126

127127
if !publicEndpoint {
128128
ethSendBundle.SigningAddress = &parsedRequest.signer
129+
130+
if ethSendBundle.ReplacementUUID != nil {
131+
timestampInt := apiNow().UnixMicro()
132+
var timestamp uint64
133+
if timestampInt < 0 {
134+
timestamp = 0
135+
} else {
136+
timestamp = uint64(timestampInt)
137+
}
138+
139+
ethSendBundle.ReplacementNonce = &timestamp
140+
}
129141
}
130142

131143
uniqueKey := ethSendBundle.UniqueKey()

proxy/receiver_proxy_test.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,12 @@ func TestProxyBundleRequestWithPeerUpdate(t *testing.T) {
269269
}
270270
}
271271
}()
272+
apiNow = func() time.Time {
273+
return time.Unix(1730000000, 0)
274+
}
275+
defer func() {
276+
apiNow = time.Now
277+
}()
272278

273279
signer, err := signature.NewSignerFromHexPrivateKey("0xd63b3c447fdea415a05e4c0b859474d14105a88178efdf350bc9f7b05be3cc58")
274280
require.NoError(t, err)
@@ -283,8 +289,9 @@ func TestProxyBundleRequestWithPeerUpdate(t *testing.T) {
283289
require.NoError(t, err)
284290
proxiesUpdatePeers(t)
285291

292+
blockNumber := hexutil.Uint64(1000)
286293
resp, err := client.Call(context.Background(), EthSendBundleMethod, &rpctypes.EthSendBundleArgs{
287-
BlockNumber: 1000,
294+
BlockNumber: &blockNumber,
288295
})
289296
require.NoError(t, err)
290297
require.Nil(t, resp.Error)
@@ -301,8 +308,9 @@ func TestProxyBundleRequestWithPeerUpdate(t *testing.T) {
301308
require.NoError(t, err)
302309
proxiesUpdatePeers(t)
303310

311+
blockNumber = hexutil.Uint64(1001)
304312
_, err = client.Call(context.Background(), EthSendBundleMethod, &rpctypes.EthSendBundleArgs{
305-
BlockNumber: 1001,
313+
BlockNumber: &blockNumber,
306314
})
307315
require.NoError(t, err)
308316

@@ -320,12 +328,15 @@ func TestProxyBundleRequestWithPeerUpdate(t *testing.T) {
320328
require.NoError(t, err)
321329
proxiesUpdatePeers(t)
322330

331+
blockNumber = hexutil.Uint64(1002)
332+
replacementUUID := "550e8400-e29b-41d4-a716-446655440000"
323333
_, err = client.Call(context.Background(), EthSendBundleMethod, &rpctypes.EthSendBundleArgs{
324-
BlockNumber: 1002,
334+
BlockNumber: &blockNumber,
335+
ReplacementUUID: &replacementUUID,
325336
})
326337
require.NoError(t, err)
327338

328-
expectedRequest = `{"method":"eth_sendBundle","params":[{"txs":null,"blockNumber":"0x3ea","signingAddress":"0x9349365494be4f6205e5d44bdc7ec7dcd134becf"}],"id":0,"jsonrpc":"2.0"}`
339+
expectedRequest = `{"method":"eth_sendBundle","params":[{"txs":null,"blockNumber":"0x3ea","replacementUuid":"550e8400-e29b-41d4-a716-446655440000","replacementNonce":1730000000000000,"signingAddress":"0x9349365494be4f6205e5d44bdc7ec7dcd134becf"}],"id":0,"jsonrpc":"2.0"}`
329340
builderRequest = expectRequest(t, proxies[0].localBuilderRequests)
330341
require.Equal(t, expectedRequest, builderRequest.body)
331342
builderRequest = expectRequest(t, proxies[1].localBuilderRequests)
@@ -353,15 +364,17 @@ func TestProxySendToArchive(t *testing.T) {
353364
apiNow = time.Now
354365
}()
355366

367+
blockNumber := hexutil.Uint64(123)
356368
resp, err := client.Call(context.Background(), EthSendBundleMethod, &rpctypes.EthSendBundleArgs{
357-
BlockNumber: 123,
369+
BlockNumber: &blockNumber,
358370
})
359371
require.NoError(t, err)
360372
require.Nil(t, resp.Error)
361373
_ = expectRequest(t, proxies[0].localBuilderRequests)
362374

375+
blockNumber = hexutil.Uint64(456)
363376
resp, err = client.Call(context.Background(), EthSendBundleMethod, &rpctypes.EthSendBundleArgs{
364-
BlockNumber: 456,
377+
BlockNumber: &blockNumber,
365378
})
366379
require.NoError(t, err)
367380
require.Nil(t, resp.Error)

proxy/sharing.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,17 @@ func (sq *ShareQueue) proxyRequests(peer *shareQueuePeer, worker int) {
157157
resp, err := peer.client.Call(ctx, method, data)
158158
cancel()
159159
timeShareQueuePeerRPCDuration(peer.name, time.Since(start).Milliseconds())
160+
161+
logSendErrorLevel := slog.LevelDebug
162+
if peer.name == "local-builder" {
163+
logSendErrorLevel = slog.LevelWarn
164+
}
160165
if err != nil {
161-
logger.Debug("Error while proxying request", slog.Any("error", err))
166+
logger.Log(context.Background(), logSendErrorLevel, "Error while proxying request", slog.Any("error", err))
162167
incShareQueuePeerRPCErrors(peer.name)
163168
}
164169
if resp != nil && resp.Error != nil {
165-
logger.Debug("Error returned from target while proxying", slog.Any("error", resp.Error))
170+
logger.Log(context.Background(), logSendErrorLevel, "Error returned from target while proxying", slog.Any("error", resp.Error))
166171
incShareQueuePeerRPCErrors(peer.name)
167172
}
168173
proxiedRequestCount += 1

0 commit comments

Comments
 (0)