Skip to content

Commit 57275e6

Browse files
committed
OEV-851 Send dualBroadcast params in TxMessage
1 parent 1e75633 commit 57275e6

2 files changed

Lines changed: 96 additions & 7 deletions

File tree

pkg/txm/metrics.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,20 @@ func (m *txmMetrics) EmitTxMessage(ctx context.Context, txHash common.Hash, from
134134
toAddress = tx.ToAddress
135135
}
136136

137+
var dualBroadcastParams *string
138+
if meta != nil && meta.DualBroadcast != nil && *meta.DualBroadcast {
139+
dualBroadcastParams = meta.DualBroadcastParams
140+
}
141+
137142
message := &svrv1.TxMessage{
138-
Hash: txHash.String(),
139-
FromAddress: fromAddress.String(),
140-
ToAddress: toAddress.String(),
141-
Nonce: strconv.FormatUint(*tx.Nonce, 10),
142-
CreatedAt: time.Now().UnixMicro(),
143-
ChainId: m.chainID.String(),
144-
FeedAddress: destAddress,
143+
Hash: txHash.String(),
144+
FromAddress: fromAddress.String(),
145+
ToAddress: toAddress.String(),
146+
Nonce: strconv.FormatUint(*tx.Nonce, 10),
147+
CreatedAt: time.Now().UnixMicro(),
148+
ChainId: m.chainID.String(),
149+
FeedAddress: destAddress,
150+
DualBroadcastParams: dualBroadcastParams,
145151
}
146152

147153
messageBytes, err := proto.Marshal(message)

pkg/txm/metrics_test.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package txm
22

33
import (
4+
"encoding/json"
45
"strconv"
56
"testing"
67

@@ -10,6 +11,7 @@ import (
1011
"github.com/stretchr/testify/require"
1112

1213
"github.com/smartcontractkit/chainlink-common/pkg/beholder/beholdertest"
14+
"github.com/smartcontractkit/chainlink-common/pkg/sqlutil"
1315
"github.com/smartcontractkit/chainlink-evm/pkg/testutils"
1416
"github.com/smartcontractkit/chainlink-evm/pkg/txm/types"
1517
svrv1 "github.com/smartcontractkit/chainlink-protos/svr/v1"
@@ -115,6 +117,87 @@ func TestEmitTxMessage(t *testing.T) {
115117
assert.Equal(t, expectedChain.String(), actualMessage.ChainId)
116118
assert.Equal(t, "", actualMessage.FeedAddress)
117119
})
120+
121+
t.Run("populates dual_broadcast_params when tx is a dual-broadcast secondary tx", func(t *testing.T) {
122+
// GIVEN
123+
ctx := t.Context()
124+
beholderTester := beholdertest.NewObserver(t)
125+
126+
toAddress := testutils.NewAddress()
127+
fromAddress := testutils.NewAddress()
128+
expectedNonce := uint64(7)
129+
expectedChain := testutils.FixtureChainID
130+
expectedParams := "hint=calldata&hint=logs&builder=flashbots"
131+
isDualBroadcast := true
132+
133+
metaBytes, err := json.Marshal(types.TxMeta{
134+
DualBroadcast: &isDualBroadcast,
135+
DualBroadcastParams: &expectedParams,
136+
})
137+
require.NoError(t, err)
138+
meta := sqlutil.JSON(metaBytes)
139+
140+
txmMetrics, err := NewTxmMetrics(expectedChain)
141+
require.NoError(t, err)
142+
143+
tx := &types.Transaction{
144+
IsPurgeable: false,
145+
FromAddress: fromAddress,
146+
ToAddress: toAddress,
147+
Nonce: &expectedNonce,
148+
Meta: &meta,
149+
}
150+
151+
// WHEN
152+
err = txmMetrics.EmitTxMessage(ctx, common.Hash{}, fromAddress, tx)
153+
require.NoError(t, err)
154+
155+
// THEN
156+
messages := beholderTester.Messages(t)
157+
assert.Len(t, messages, 1)
158+
159+
var actualMessage svrv1.TxMessage
160+
err = proto.Unmarshal(messages[0].Body, &actualMessage)
161+
require.NoError(t, err)
162+
163+
require.NotNil(t, actualMessage.DualBroadcastParams)
164+
assert.Equal(t, expectedParams, *actualMessage.DualBroadcastParams)
165+
})
166+
167+
t.Run("does not set dual_broadcast_params for a primary (non-dual-broadcast) tx", func(t *testing.T) {
168+
// GIVEN
169+
ctx := t.Context()
170+
beholderTester := beholdertest.NewObserver(t)
171+
172+
toAddress := testutils.NewAddress()
173+
fromAddress := testutils.NewAddress()
174+
expectedNonce := uint64(3)
175+
expectedChain := testutils.FixtureChainID
176+
177+
txmMetrics, err := NewTxmMetrics(expectedChain)
178+
require.NoError(t, err)
179+
180+
tx := &types.Transaction{
181+
IsPurgeable: false,
182+
FromAddress: fromAddress,
183+
ToAddress: toAddress,
184+
Nonce: &expectedNonce,
185+
}
186+
187+
// WHEN
188+
err = txmMetrics.EmitTxMessage(ctx, common.Hash{}, fromAddress, tx)
189+
require.NoError(t, err)
190+
191+
// THEN
192+
messages := beholderTester.Messages(t)
193+
assert.Len(t, messages, 1)
194+
195+
var actualMessage svrv1.TxMessage
196+
err = proto.Unmarshal(messages[0].Body, &actualMessage)
197+
require.NoError(t, err)
198+
199+
assert.Nil(t, actualMessage.DualBroadcastParams)
200+
})
118201
}
119202

120203
func TestReachedMaxAttempts(t *testing.T) {

0 commit comments

Comments
 (0)