Skip to content

Commit c375109

Browse files
committed
Refactored for processor injection and restructured code
1 parent 4c3226a commit c375109

File tree

6 files changed

+49
-68
lines changed

6 files changed

+49
-68
lines changed

pkg/report/datafeeds/evm/decode.go

Lines changed: 0 additions & 38 deletions
This file was deleted.
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
package evm
1+
package datafeeds
22

33
import (
44
"fmt"
55
"math/big"
66

77
"github.com/ethereum/go-ethereum/accounts/abi"
8-
"github.com/smartcontractkit/chainlink-evm/pkg/report/datafeeds"
98
)
109

1110
type Report struct {
12-
datafeeds.Metadata
11+
Metadata
1312
Data []byte
1413
}
1514

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
package evm_test
1+
package datafeeds_test
22

33
import (
44
"math/big"
55
"testing"
66

7-
"github.com/smartcontractkit/chainlink-evm/pkg/report/datafeeds/evm"
7+
"github.com/smartcontractkit/chainlink-evm/pkg/report/datafeeds"
88
)
99

1010
func TestDecodeFeedReport(t *testing.T) {
1111
// Create some sample records.
12-
original := []evm.FeedReport{
12+
original := []datafeeds.FeedReport{
1313
{
1414
// Example feedID: the first byte is 0x01 and the remainder are zeros.
1515
FeedID: [32]byte{0x01},
@@ -24,7 +24,7 @@ func TestDecodeFeedReport(t *testing.T) {
2424
}
2525

2626
// Get the ABI schema from our constructor.
27-
schema := evm.GetSchema()
27+
schema := datafeeds.GetSchema()
2828

2929
// Pack the original data using the ABI schema.
3030
encoded, err := schema.Pack(original)
@@ -33,7 +33,7 @@ func TestDecodeFeedReport(t *testing.T) {
3333
}
3434

3535
// Decode the data using our Decode function.
36-
decoded, err := evm.Decode(encoded)
36+
decoded, err := datafeeds.Decode(encoded)
3737
if err != nil {
3838
t.Fatalf("failed to decode data: %v", err)
3939
}

pkg/report/pb/data-feeds/on-chain/registry/decode.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,43 @@
11
package registry
22

33
import (
4+
"fmt"
45
"math"
56
"math/big"
67

78
wt_msg "github.com/smartcontractkit/chainlink-evm/pkg/report/pb/platform"
9+
"github.com/smartcontractkit/chainlink-evm/pkg/report/platform"
810

911
"github.com/smartcontractkit/chainlink-evm/pkg/report/datafeeds"
1012
)
1113

14+
func DecodeAsFeedUpdated(m *wt_msg.WriteConfirmed) ([]*FeedUpdated, error) {
15+
// Decode the confirmed report (WT -> DF contract event)
16+
r, err := platform.Decode(m.Report)
17+
if err != nil {
18+
return nil, fmt.Errorf("failed to decode report: %w", err)
19+
}
20+
21+
// Decode the underlying Data Feeds reports
22+
reports, err := datafeeds.Decode(r.Data)
23+
if err != nil {
24+
return nil, fmt.Errorf("failed to decode Data Feeds report: %w", err)
25+
}
26+
27+
// Allocate space for the messages (event per updated feed)
28+
msgs := make([]*FeedUpdated, 0, len(*reports))
29+
30+
// Iterate over the underlying Mercury reports
31+
for _, rf := range *reports {
32+
feedID := datafeeds.FeedID(rf.FeedID)
33+
34+
// TODO: unsure if r.Data is correct for Report
35+
msgs = append(msgs, NewFeedUpdated(m, feedID, rf.Timestamp, rf.Price, r.Data, false))
36+
}
37+
38+
return msgs, nil
39+
}
40+
1241
// newFeedUpdated creates a FeedUpdated from the given common parameters.
1342
// If includeTxInfo is true, TxSender and TxReceiver are set.
1443
func NewFeedUpdated(
@@ -24,7 +53,7 @@ func NewFeedUpdated(
2453
ObservationsTimestamp: observationsTimestamp,
2554
Benchmark: benchmarkPrice.Bytes(),
2655
Report: report,
27-
BenchmarkVal: ToBenchmarkVal(feedID, benchmarkPrice),
56+
BenchmarkVal: toBenchmarkVal(feedID, benchmarkPrice),
2857

2958
// Head data - when was the event produced on-chain
3059
BlockHash: m.BlockHash,
@@ -71,7 +100,7 @@ func NewFeedUpdated(
71100
// for most use-cases. For big numbers, benchmark bytes should be used instead.
72101
//
73102
// Returns `math.NaN()` if report data type not a number, or `+/-Inf` if number doesn't fit in double.
74-
func ToBenchmarkVal(feedID datafeeds.FeedID, val *big.Int) float64 {
103+
func toBenchmarkVal(feedID datafeeds.FeedID, val *big.Int) float64 {
75104
// Return NaN if the value is nil
76105
if val == nil {
77106
return math.NaN()

pkg/report/datafeeds/evm/decode_test.go renamed to pkg/report/pb/data-feeds/on-chain/registry/decode_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// evm_feedupdated_test.go
2-
package evm_test
2+
package registry_test
33

44
import (
55
"encoding/hex"
@@ -9,13 +9,13 @@ import (
99
"github.com/stretchr/testify/require"
1010

1111
"github.com/smartcontractkit/chainlink-evm/pkg/report/datafeeds"
12-
"github.com/smartcontractkit/chainlink-evm/pkg/report/datafeeds/evm"
1312

13+
"github.com/smartcontractkit/chainlink-evm/pkg/report/pb/data-feeds/on-chain/registry"
1414
wt_msg "github.com/smartcontractkit/chainlink-evm/pkg/report/pb/platform"
1515
)
1616

1717
func TestDecodeAsFeedUpdated(t *testing.T) {
18-
feedReports := evm.Reports{
18+
feedReports := datafeeds.Reports{
1919
{
2020
FeedID: [32]byte{0x01},
2121
Price: big.NewInt(1234567890),
@@ -24,7 +24,7 @@ func TestDecodeAsFeedUpdated(t *testing.T) {
2424
}
2525

2626
// ABI‑encode the feed reports using the global schema.
27-
feedReportsEncoded, err := evm.GetSchema().Pack(feedReports)
27+
feedReportsEncoded, err := datafeeds.GetSchema().Pack(feedReports)
2828
require.NoError(t, err)
2929

3030
metadata := datafeeds.Metadata{
@@ -40,7 +40,7 @@ func TestDecodeAsFeedUpdated(t *testing.T) {
4040
}
4141

4242
// Build the full Report with the metadata and the already ABI‑encoded feed reports.
43-
report := evm.Report{
43+
report := datafeeds.Report{
4444
Metadata: metadata,
4545
Data: feedReportsEncoded,
4646
}
@@ -66,7 +66,7 @@ func TestDecodeAsFeedUpdated(t *testing.T) {
6666
}
6767

6868
// Decode the WriteConfirmed message.
69-
feedUpdates, err := evm.DecodeAsFeedUpdated(&validMsg)
69+
feedUpdates, err := registry.DecodeAsFeedUpdated(&validMsg)
7070
require.NoError(t, err)
7171

7272
require.Len(t, feedUpdates, len(feedReports))
@@ -85,6 +85,6 @@ func TestDecodeAsFeedUpdated(t *testing.T) {
8585
invalidMsg := wt_msg.WriteConfirmed{
8686
Report: []byte{0x01, 0x02, 0x03, 0x04},
8787
}
88-
_, err = evm.DecodeAsFeedUpdated(&invalidMsg)
88+
_, err = registry.DecodeAsFeedUpdated(&invalidMsg)
8989
require.Error(t, err)
9090
}

pkg/writetarget/write_target_monitor.go

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,10 @@ const (
3030
// includes decoding messages as specific types and deriving metrics based on the decoded messages.
3131
// TODO: Report decoding uses the same ABI for EVM and Aptos, however, future chains may need a different
3232
// decoding scheme. Generalize this in the future to support different chains and decoding schemes.
33-
func NewMonitor(ctx context.Context, lggr logger.Logger, decodeFn func(m *wt.WriteConfirmed) ([]*registry.FeedUpdated, error)) (*monitor.BeholderClient, error) {
33+
func NewMonitor(lggr logger.Logger, chainSpecificProcessors []monitor.ProtoProcessor) (*monitor.BeholderClient, error) {
3434
// Initialize the Beholder client with a local logger a custom Emitter
3535
client := beholder.GetClient().ForPackage("write_target")
3636

37-
registryMetrics, err := registry.NewMetrics()
38-
if err != nil {
39-
return nil, fmt.Errorf("failed to create new registry metrics: %w", err)
40-
}
41-
4237
forwarderMetrics, err := forwarder.NewMetrics()
4338
if err != nil {
4439
return nil, fmt.Errorf("failed to create new forwarder metrics: %w", err)
@@ -54,13 +49,9 @@ func NewMonitor(ctx context.Context, lggr logger.Logger, decodeFn func(m *wt.Wri
5449

5550
// Proxy ProtoEmitter with additional processing
5651
protoEmitterProxy := protoEmitter{
57-
lggr: lggr,
58-
emitter: emitter,
59-
processors: []monitor.ProtoProcessor{
60-
&wtProcessor{wtMetrics},
61-
&keystoneProcessor{emitter, forwarderMetrics},
62-
&dataFeedsProcessor{emitter, registryMetrics, decodeFn},
63-
},
52+
lggr: lggr,
53+
emitter: emitter,
54+
processors: append(chainSpecificProcessors, &wtProcessor{wtMetrics}, &keystoneProcessor{emitter, forwarderMetrics}),
6455
}
6556
return &monitor.BeholderClient{Client: &client, ProtoEmitter: &protoEmitterProxy}, nil
6657
}

0 commit comments

Comments
 (0)