diff --git a/go.mod b/go.mod index 05a76ff3..2f0cab44 100644 --- a/go.mod +++ b/go.mod @@ -14,12 +14,13 @@ require ( github.com/google/uuid v1.3.1 github.com/jedib0t/go-pretty/v6 v6.4.7 github.com/pkg/errors v0.9.1 + github.com/prometheus/client_golang v1.17.0 github.com/shopspring/decimal v1.3.1 - github.com/smartcontractkit/chainlink-common v0.1.7-0.20240118012339-4864e2306bb1 + github.com/smartcontractkit/chainlink-common v0.1.7-0.20240327003736-b5f6f5e99c70 github.com/smartcontractkit/libocr v0.0.0-20240229181116-bfb2432a7a66 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.8.4 - golang.org/x/crypto v0.17.0 + github.com/stretchr/testify v1.9.0 + golang.org/x/crypto v0.18.0 gonum.org/v1/gonum v0.13.0 ) @@ -32,7 +33,7 @@ require ( github.com/consensys/bavard v0.1.13 // indirect github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deckarep/golang-set/v2 v2.3.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/ethereum/c-kzg-4844 v0.4.0 // indirect @@ -46,13 +47,12 @@ require ( github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/mr-tron/base58 v1.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.17.0 // indirect github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect github.com/prometheus/common v0.44.0 // indirect github.com/prometheus/procfs v0.11.1 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect - github.com/stretchr/objx v0.5.0 // indirect + github.com/stretchr/objx v0.5.2 // indirect github.com/supranational/blst v0.3.11 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect @@ -60,8 +60,8 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.16.0 // indirect golang.org/x/tools v0.15.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index fc479b18..de03f9be 100644 --- a/go.sum +++ b/go.sum @@ -39,8 +39,9 @@ github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJ github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set/v2 v2.3.0 h1:qs18EKUfHm2X9fA50Mr/M5hccg2tNnVqsiBImnyDs0g= github.com/deckarep/golang-set/v2 v2.3.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= @@ -139,8 +140,8 @@ github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKl github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/smartcontractkit/chainlink-common v0.1.7-0.20240118012339-4864e2306bb1 h1:3cWO2/lFVDul5SVTgl4/RX/GXcT8Zq5NGMPeNEz09tY= -github.com/smartcontractkit/chainlink-common v0.1.7-0.20240118012339-4864e2306bb1/go.mod h1:f+0ei9N4PlTJHu7pbGzEjTnBUr45syPdGFu5+31lS5Q= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240327003736-b5f6f5e99c70 h1:KNGKyplmVwtZiv5NhDSxNRE2duwUz5ghUs2L9cIx8JU= +github.com/smartcontractkit/chainlink-common v0.1.7-0.20240327003736-b5f6f5e99c70/go.mod h1://xWphjmC6GWJtT8l86J2VpnG21xNwFCb0thzz4ItEk= github.com/smartcontractkit/libocr v0.0.0-20240229181116-bfb2432a7a66 h1:xsU00JB9GJxEiN6tDbqgN+fT98ySdxkUwTw6CfBXscw= github.com/smartcontractkit/libocr v0.0.0-20240229181116-bfb2432a7a66/go.mod h1:SJEZCHgMCAzzBvo9vMV2DQ9onfEcIJCYSViyP4JI6c4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -149,14 +150,13 @@ github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobt github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -171,22 +171,22 @@ github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFi github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= diff --git a/pkg/v3/config/config.go b/pkg/v3/config/config.go index bdf02c07..4425c73c 100644 --- a/pkg/v3/config/config.go +++ b/pkg/v3/config/config.go @@ -63,6 +63,17 @@ type OffchainConfig struct { // MaxUpkeepBatchSize is the max upkeep batch size of the OCR2 report. MaxUpkeepBatchSize int `json:"maxUpkeepBatchSize"` + + // LogProviderConfig holds configuration for the log provider + LogProviderConfig LogProviderConfig `json:"logProviderConfig"` +} + +type LogProviderConfig struct { + // BlockRate is the amount of blocks used together with LogLimitHigh to define the rate limit for each upkeep in the registry. + BlockRate uint32 `json:"blockRate"` + + // LogLimit is the lower bound / minimum number of logs that CLA is committed to process for each upkeep per BlockRate. + LogLimit uint32 `json:"logLimit"` } // DecodeOffchainConfig decodes bytes into an OffchainConfig diff --git a/pkg/v3/config/config_test.go b/pkg/v3/config/config_test.go index 28898ab1..3fdaa955 100644 --- a/pkg/v3/config/config_test.go +++ b/pkg/v3/config/config_test.go @@ -26,7 +26,11 @@ func TestDecodeOffchainConfig(t *testing.T) { "gasOverheadPerUpkeep": 100, "maxUpkeepBatchSize": 100, "reportBlockLag": 100, - "mercuryLookup": true + "mercuryLookup": true, + "logProviderConfig": { + "blockRate": 32, + "logLimit": 50 + } } `), ExpectedErrString: "", @@ -38,6 +42,10 @@ func TestDecodeOffchainConfig(t *testing.T) { GasLimitPerReport: 10, GasOverheadPerUpkeep: 100, MaxUpkeepBatchSize: 100, + LogProviderConfig: LogProviderConfig{ + BlockRate: 32, + LogLimit: 50, + }, }, }, { @@ -52,7 +60,12 @@ func TestDecodeOffchainConfig(t *testing.T) { "minConfirmations": 10, "gasLimitPerReport": 10, "gasOverheadPerUpkeep": 100, - "maxUpkeepBatchSize": 100 + "maxUpkeepBatchSize": 100, + "logProviderConfig": { + "blockRate": 10, + "logLimit": 20, + "additionalField": 30 + } } `), ExpectedErrString: "", @@ -64,6 +77,10 @@ func TestDecodeOffchainConfig(t *testing.T) { GasLimitPerReport: 10, GasOverheadPerUpkeep: 100, MaxUpkeepBatchSize: 100, + LogProviderConfig: LogProviderConfig{ + BlockRate: 10, + LogLimit: 20, + }, }, }, { @@ -78,6 +95,10 @@ func TestDecodeOffchainConfig(t *testing.T) { GasLimitPerReport: 5_300_000, GasOverheadPerUpkeep: 300_000, MaxUpkeepBatchSize: 1, + LogProviderConfig: LogProviderConfig{ + BlockRate: 0, + LogLimit: 0, + }, }, }, { @@ -92,7 +113,11 @@ func TestDecodeOffchainConfig(t *testing.T) { "gasLimitPerReport": 0, "gasOverheadPerUpkeep": 0, "maxUpkeepBatchSize": -100, - "reportBlockLag": -100 + "reportBlockLag": -100, + "logProviderConfig": { + "blockRate": 0, + "logLimit": 0 + } } `), ExpectedErrString: "", @@ -104,6 +129,10 @@ func TestDecodeOffchainConfig(t *testing.T) { GasLimitPerReport: 5_300_000, GasOverheadPerUpkeep: 300_000, MaxUpkeepBatchSize: 1, + LogProviderConfig: LogProviderConfig{ + BlockRate: 0, + LogLimit: 0, + }, }, }, { @@ -117,7 +146,11 @@ func TestDecodeOffchainConfig(t *testing.T) { "minConfirmations": -10, "gasLimitPerReport": 0, "gasOverheadPerUpkeep": 0, - "maxUpkeepBatchSize": -100 + "maxUpkeepBatchSize": -100, + "logProviderConfig": { + "numOfLogUpkeeps": false, + "logLimitHigh": true + } } `), ExpectedErrString: "json: cannot unmarshal string", diff --git a/pkg/v3/plugin/factory.go b/pkg/v3/plugin/factory.go index 225b6d1e..9d23280f 100644 --- a/pkg/v3/plugin/factory.go +++ b/pkg/v3/plugin/factory.go @@ -91,6 +91,11 @@ func (factory *pluginFactory) NewReportingPlugin(c ocr3types.ReportingPluginConf return nil, info, fmt.Errorf("%w: failed to create plugin", err) } + factory.logProvider.SetConfig(commontypes.LogEventProviderConfig{ + BlockRate: conf.LogProviderConfig.BlockRate, + LogLimit: conf.LogProviderConfig.LogLimit, + }) + // create the plugin; all services start automatically p, err := newPlugin( c.ConfigDigest, diff --git a/pkg/v3/types/mocks/logeventprovider.generated.go b/pkg/v3/types/mocks/logeventprovider.generated.go index 1f4ffc22..225bc421 100644 --- a/pkg/v3/types/mocks/logeventprovider.generated.go +++ b/pkg/v3/types/mocks/logeventprovider.generated.go @@ -55,6 +55,11 @@ func (_m *MockLogEventProvider) GetLatestPayloads(_a0 context.Context) ([]automa return r0, r1 } +// SetConfig provides a mock function with given fields: _a0 +func (_m *MockLogEventProvider) SetConfig(_a0 automation.LogEventProviderConfig) { + _m.Called(_a0) +} + // Start provides a mock function with given fields: _a0 func (_m *MockLogEventProvider) Start(_a0 context.Context) error { ret := _m.Called(_a0) diff --git a/tools/simulator/simulate/upkeep/source.go b/tools/simulator/simulate/upkeep/source.go index 937561b3..dc211718 100644 --- a/tools/simulator/simulate/upkeep/source.go +++ b/tools/simulator/simulate/upkeep/source.go @@ -47,6 +47,8 @@ func (src *Source) Start(_ context.Context) error { return nil } +func (src *Source) SetConfig(_ ocr2keepers.LogEventProviderConfig) {} + // GetActiveUpkeeps delivers all active conditional upkeep payloads. Payloads // returned should be at least once and only when active. func (src *Source) GetActiveUpkeeps(_ context.Context) ([]ocr2keepers.UpkeepPayload, error) {