Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 23 additions & 19 deletions chain_capabilities/stellar/actions/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,15 @@ import (
// Stellar implements the CRE capability actions for the Stellar chain.
type Stellar struct {
types.StellarService
handler chainconsensus.RequestHandler
lggr logger.SugaredLogger
messageBuilder *monitoring.MessageBuilder
beholderProcessor beholder.ProtoProcessor
chainSelector uint64
forwarderClient CREForwarderClient
forwarderLookbackLedgers int64
reportSizeLimit limits.BoundLimiter[commoncfg.Size]
maxResourceFeeLimit limits.BoundLimiter[uint64]
transmissionScheduler ts.TransmissionScheduler
handler chainconsensus.RequestHandler
lggr logger.SugaredLogger
messageBuilder *monitoring.MessageBuilder
beholderProcessor beholder.ProtoProcessor
chainSelector uint64
forwarderClient CREForwarderClient
reportSizeLimit limits.BoundLimiter[commoncfg.Size]
maxResourceFeeLimit limits.BoundLimiter[uint64]
transmissionScheduler ts.TransmissionScheduler
}

func NewStellar(
Expand All @@ -63,17 +62,22 @@ func NewStellar(
if service == nil {
return nil, fmt.Errorf("stellar service is required")
}
if forwarderLookbackLedgers < 0 {
return nil, fmt.Errorf("forwarder lookback ledgers must be non-negative")
}
if forwarderLookbackLedgers == 0 {
forwarderLookbackLedgers = DefaultForwarderLookbackLedgers
}

st := &Stellar{
StellarService: service,
handler: handler,
lggr: logger.Sugared(lggr),
messageBuilder: messageBuilder,
beholderProcessor: beholderProcessor,
chainSelector: chainSelector,
forwarderClient: newForwarderClient(service, lggr, forwarderAddress, forwarderLookbackLedgers),
forwarderLookbackLedgers: forwarderLookbackLedgers,
transmissionScheduler: transmissionScheduler,
StellarService: service,
handler: handler,
lggr: logger.Sugared(lggr),
messageBuilder: messageBuilder,
beholderProcessor: beholderProcessor,
chainSelector: chainSelector,
forwarderClient: newForwarderClient(service, lggr, forwarderAddress, forwarderLookbackLedgers),
transmissionScheduler: transmissionScheduler,
}
return st, st.initLimiters(limitsFactory)
}
Expand Down
20 changes: 20 additions & 0 deletions chain_capabilities/stellar/actions/actions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,26 @@ func TestNewStellar(t *testing.T) {
require.NotNil(t, st)
require.NoError(t, st.Close())
})

t.Run("negative forwarder lookback ledgers", func(t *testing.T) {
t.Parallel()
lggr := logger.Test(t)
svc := mocks.NewStellarService(t)
_, err := NewStellar(
svc,
"CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC",
-1,
lggr,
limits.Factory{Logger: lggr},
ts.TransmissionScheduler{},
1,
testConsensusHandler{handle: runVolatileHashableHandle},
monitoring.NewMessageBuilder(types.ChainInfo{}, capabilities.CapabilityInfo{}, ""),
nopBeholderProcessor{},
)
require.Error(t, err)
require.Contains(t, err.Error(), "forwarder lookback ledgers must be non-negative")
})
}

func TestGetLatestLedger(t *testing.T) {
Expand Down
38 changes: 18 additions & 20 deletions chain_capabilities/stellar/actions/write_report.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,15 @@ const (
)

type writeReport struct {
service types.StellarService
forwarderClient CREForwarderClient
lggr logger.SugaredLogger
forwarderLookbackLedgers int64
chainSelector uint64
reportSizeLimit limits.BoundLimiter[commoncfg.Size]
maxResourceFeeLimit limits.BoundLimiter[uint64]
transmissionScheduler ts.TransmissionScheduler
messageBuilder *monitoring.MessageBuilder
beholderProcessor beholder.ProtoProcessor
service types.StellarService
forwarderClient CREForwarderClient
lggr logger.SugaredLogger
chainSelector uint64
reportSizeLimit limits.BoundLimiter[commoncfg.Size]
maxResourceFeeLimit limits.BoundLimiter[uint64]
transmissionScheduler ts.TransmissionScheduler
messageBuilder *monitoring.MessageBuilder
beholderProcessor beholder.ProtoProcessor
}

func (s *Stellar) WriteReport(
Expand Down Expand Up @@ -95,16 +94,15 @@ func (s *Stellar) executeWriteReport(
telemetryContext monitoring.TelemetryContext,
) (*stellarcap.WriteReportReply, capabilities.ResponseMetadata, error) {
wr := &writeReport{
service: s.StellarService,
forwarderClient: s.forwarderClient,
lggr: s.messageBuilder.RequestLggr(s.lggr, telemetryContext),
forwarderLookbackLedgers: s.forwarderLookbackLedgers,
chainSelector: s.chainSelector,
reportSizeLimit: s.reportSizeLimit,
maxResourceFeeLimit: s.maxResourceFeeLimit,
transmissionScheduler: s.transmissionScheduler,
messageBuilder: s.messageBuilder,
beholderProcessor: s.beholderProcessor,
service: s.StellarService,
forwarderClient: s.forwarderClient,
lggr: s.messageBuilder.RequestLggr(s.lggr, telemetryContext),
chainSelector: s.chainSelector,
reportSizeLimit: s.reportSizeLimit,
maxResourceFeeLimit: s.maxResourceFeeLimit,
transmissionScheduler: s.transmissionScheduler,
messageBuilder: s.messageBuilder,
beholderProcessor: s.beholderProcessor,
}
return wr.execute(ctx, request, metadata, telemetryContext)
}
Expand Down
34 changes: 16 additions & 18 deletions chain_capabilities/stellar/actions/write_report_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,14 @@ func newWriteReportHelper(t *testing.T) *writeReportHelper {
myPeerID, []p2ptypes.PeerID{myPeerID}, 100*time.Millisecond, 0, lggr)

s := &Stellar{
StellarService: mockSvc,
lggr: logger.Sugared(lggr),
chainSelector: testWRChainSelector,
forwarderClient: newForwarderClient(mockSvc, lggr, testForwarderAddress, 100),
forwarderLookbackLedgers: 100,
transmissionScheduler: scheduler,
messageBuilder: monitoring.NewMessageBuilder(types.ChainInfo{}, capabilities.CapabilityInfo{}, ""),
beholderProcessor: nopBeholderProcessor{},
handler: testConsensusHandler{handle: runVolatileHashableHandle},
StellarService: mockSvc,
lggr: logger.Sugared(lggr),
chainSelector: testWRChainSelector,
forwarderClient: newForwarderClient(mockSvc, lggr, testForwarderAddress, 100),
transmissionScheduler: scheduler,
messageBuilder: monitoring.NewMessageBuilder(types.ChainInfo{}, capabilities.CapabilityInfo{}, ""),
beholderProcessor: nopBeholderProcessor{},
handler: testConsensusHandler{handle: runVolatileHashableHandle},
}
require.NoError(t, s.initLimiters(limits.Factory{Logger: lggr}))
return &writeReportHelper{svc: mockSvc, stellar: s}
Expand Down Expand Up @@ -1433,15 +1432,14 @@ func newQueuedWriteReportHelper(t *testing.T) *writeReportHelper {
lggr,
)
s := &Stellar{
StellarService: mockSvc,
lggr: logger.Sugared(lggr),
chainSelector: testWRChainSelector,
forwarderClient: newForwarderClient(mockSvc, lggr, testForwarderAddress, 100),
forwarderLookbackLedgers: 100,
transmissionScheduler: scheduler,
messageBuilder: monitoring.NewMessageBuilder(types.ChainInfo{}, capabilities.CapabilityInfo{}, ""),
beholderProcessor: nopBeholderProcessor{},
handler: testConsensusHandler{handle: runVolatileHashableHandle},
StellarService: mockSvc,
lggr: logger.Sugared(lggr),
chainSelector: testWRChainSelector,
forwarderClient: newForwarderClient(mockSvc, lggr, testForwarderAddress, 100),
transmissionScheduler: scheduler,
messageBuilder: monitoring.NewMessageBuilder(types.ChainInfo{}, capabilities.CapabilityInfo{}, ""),
beholderProcessor: nopBeholderProcessor{},
handler: testConsensusHandler{handle: runVolatileHashableHandle},
}
require.NoError(t, s.initLimiters(limits.Factory{Logger: lggr}))
return &writeReportHelper{svc: mockSvc, stellar: s}
Expand Down
3 changes: 3 additions & 0 deletions chain_capabilities/stellar/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ func (c *Config) UnmarshalJSON(bs []byte) error {
if err := validateContractStrKey(cfg.CREForwarderAddress); err != nil {
return fmt.Errorf("creForwarderAddress: %w", err)
}
if cfg.ForwarderLookbackLedgers < 0 {
return fmt.Errorf("forwarderLookbackLedgers must be non-negative")
}
*c = Config(cfg)
return nil
}
Expand Down
14 changes: 14 additions & 0 deletions chain_capabilities/stellar/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,18 @@ func TestConfig_UnmarshalJSON(t *testing.T) {
require.NoError(t, json.Unmarshal([]byte(input), &cfg))
assert.EqualValues(t, 250, cfg.ForwarderLookbackLedgers)
})

t.Run("negative forwarderLookbackLedgers", func(t *testing.T) {
t.Parallel()
input := `{
"chainId":"stellar-testnet",
"network":"stellar",
"creForwarderAddress":"CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC",
"forwarderLookbackLedgers":-1
}`
var cfg Config
err := json.Unmarshal([]byte(input), &cfg)
require.Error(t, err)
require.Contains(t, err.Error(), "forwarderLookbackLedgers must be non-negative")
})
}
Loading