diff --git a/.github/workflows/automation-load-tests.yml b/.github/workflows/automation-load-tests.yml
index b19ac8fd24c..96dffa01db9 100644
--- a/.github/workflows/automation-load-tests.yml
+++ b/.github/workflows/automation-load-tests.yml
@@ -22,6 +22,10 @@ on:
description: TestInputs
required: false
type: string
+ ConfigOverride:
+ description: ConfigOverride
+ required: false
+ type: string
slackMemberID:
description: Notifies test results (Not your @)
required: true
@@ -43,6 +47,7 @@ jobs:
SLACK_API_KEY: ${{ secrets.QA_SLACK_API_KEY }}
SLACK_CHANNEL: C03KJ5S7KEK
TEST_INPUTS: ${{ inputs.TestInputs }}
+ CONFIG_OVERRIDE: ${{ inputs.ConfigOverride }}
CHAINLINK_ENV_USER: ${{ github.actor }}
REF_NAME: ${{ github.head_ref || github.ref_name }}
steps:
diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml
index b1caa52acec..e8243c8cdfa 100644
--- a/.github/workflows/integration-tests.yml
+++ b/.github/workflows/integration-tests.yml
@@ -407,8 +407,6 @@ jobs:
pyroscope_env: ci-smoke-vrf-evm-simulated
- name: vrfv2
nodes: 1
- run: -run TestVRFv2MultipleSendingKeys
- file: vrfv2
os: ubuntu-latest
pyroscope_env: ci-smoke-vrf2-evm-simulated
- name: vrfv2plus
diff --git a/.github/workflows/live-testnet-tests.yml b/.github/workflows/live-testnet-tests.yml
index f202f03e51b..7a12ab6d6a0 100644
--- a/.github/workflows/live-testnet-tests.yml
+++ b/.github/workflows/live-testnet-tests.yml
@@ -10,7 +10,7 @@
name: Live Testnet Tests
on:
schedule:
- - cron: "0 0 * * *" # Run every Sunday at midnight
+ - cron: "0 5 * * *" # Run every Sunday at midnight EST
push:
tags:
- "*"
@@ -144,7 +144,7 @@ jobs:
id-token: write
contents: read
runs-on: ubuntu-latest
- needs: [sepolia-smoke-tests, bsc-testnet-tests, optimism-sepolia-smoke-tests, arbitrum-sepolia-smoke-tests, base-goerli-smoke-tests, base-sepolia-smoke-tests, polygon-mumbai-smoke-tests, avalanche-fuji-smoke-tests, fantom-testnet-smoke-tests, celo-alfajores-smoke-tests, scroll-sepolia-smoke-tests, linea-goerli-smoke-tests]
+ needs: [sepolia-smoke-tests, bsc-testnet-tests, optimism-sepolia-smoke-tests, arbitrum-sepolia-smoke-tests, base-goerli-smoke-tests, base-sepolia-smoke-tests, polygon-mumbai-smoke-tests, avalanche-fuji-smoke-tests, fantom-testnet-smoke-tests, celo-alfajores-smoke-tests, linea-goerli-smoke-tests]
steps:
- name: Debug Result
run: echo ${{ join(needs.*.result, ',') }}
@@ -205,7 +205,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- network: [Sepolia, Optimism Sepolia, Arbitrum Sepolia, Base Goerli, Base Sepolia, Polygon Mumbai, Avalanche Fuji, Fantom Testnet, Celo Alfajores, Scroll Sepolia, Linea Goerli, BSC Testnet]
+ network: [Sepolia, Optimism Sepolia, Arbitrum Sepolia, Base Goerli, Base Sepolia, Polygon Mumbai, Avalanche Fuji, Fantom Testnet, Celo Alfajores, Linea Goerli, BSC Testnet]
steps:
- name: Get Results
id: test-results
@@ -775,8 +775,10 @@ jobs:
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }}
QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
-
+
scroll-sepolia-smoke-tests:
+ # TODO: Disabled until bug TT-767 is fixed
+ if: false
environment: integration
permissions:
checks: write
diff --git a/contracts/src/v0.8/automation/testhelpers/SimpleLogUpkeepCounter.sol b/contracts/src/v0.8/automation/testhelpers/SimpleLogUpkeepCounter.sol
index 563c1354b66..6ef6f8a36ff 100644
--- a/contracts/src/v0.8/automation/testhelpers/SimpleLogUpkeepCounter.sol
+++ b/contracts/src/v0.8/automation/testhelpers/SimpleLogUpkeepCounter.sol
@@ -4,6 +4,12 @@ pragma solidity 0.8.6;
import {ILogAutomation, Log} from "../interfaces/ILogAutomation.sol";
+struct CheckData {
+ uint256 checkBurnAmount;
+ uint256 performBurnAmount;
+ bytes32 eventSig;
+}
+
contract SimpleLogUpkeepCounter is ILogAutomation {
event PerformingUpkeep(
address indexed from,
@@ -14,6 +20,7 @@ contract SimpleLogUpkeepCounter is ILogAutomation {
uint256 timeToPerform
);
+ mapping(bytes32 => bool) public dummyMap; // used to force storage lookup
uint256 public lastBlock;
uint256 public previousPerformBlock;
uint256 public initialBlock;
@@ -27,8 +34,27 @@ contract SimpleLogUpkeepCounter is ILogAutomation {
counter = 0;
}
- function checkLog(Log calldata log, bytes memory) external view override returns (bool, bytes memory) {
- return (true, abi.encode(log));
+ function _checkDataConfig(CheckData memory) external {}
+
+ function checkLog(Log calldata log, bytes calldata checkData) external view override returns (bool, bytes memory) {
+ (uint256 checkBurnAmount, uint256 performBurnAmount, bytes32 eventSig) = abi.decode(
+ checkData,
+ (uint256, uint256, bytes32)
+ );
+ uint256 startGas = gasleft();
+ bytes32 dummyIndex = blockhash(block.number - 1);
+ bool dummy;
+ // burn gas
+ if (checkBurnAmount > 0) {
+ while (startGas - gasleft() < checkBurnAmount) {
+ dummy = dummy && dummyMap[dummyIndex]; // arbitrary storage reads
+ dummyIndex = keccak256(abi.encode(dummyIndex, address(this)));
+ }
+ }
+ if (log.topics[2] == eventSig) {
+ return (true, abi.encode(log, checkData));
+ }
+ return (false, abi.encode(log, checkData));
}
function performUpkeep(bytes calldata performData) external override {
@@ -38,8 +64,22 @@ contract SimpleLogUpkeepCounter is ILogAutomation {
lastBlock = block.number;
counter = counter + 1;
previousPerformBlock = lastBlock;
- Log memory log = abi.decode(performData, (Log));
+ (Log memory log, bytes memory extraData) = abi.decode(performData, (Log, bytes));
timeToPerform = block.timestamp - log.timestamp;
+ (uint256 checkBurnAmount, uint256 performBurnAmount, bytes32 eventSig) = abi.decode(
+ extraData,
+ (uint256, uint256, bytes32)
+ );
+ uint256 startGas = gasleft();
+ bytes32 dummyIndex = blockhash(block.number - 1);
+ bool dummy;
+ // burn gas
+ if (performBurnAmount > 0) {
+ while (startGas - gasleft() < performBurnAmount) {
+ dummy = dummy && dummyMap[dummyIndex]; // arbitrary storage reads
+ dummyIndex = keccak256(abi.encode(dummyIndex, address(this)));
+ }
+ }
emit PerformingUpkeep(tx.origin, initialBlock, lastBlock, previousPerformBlock, counter, timeToPerform);
}
}
diff --git a/contracts/src/v0.8/tests/LogEmitter.sol b/contracts/src/v0.8/tests/LogEmitter.sol
index d3f950c5ccb..37306cc2bc5 100644
--- a/contracts/src/v0.8/tests/LogEmitter.sol
+++ b/contracts/src/v0.8/tests/LogEmitter.sol
@@ -5,6 +5,7 @@ contract LogEmitter {
event Log1(uint256);
event Log2(uint256 indexed);
event Log3(string);
+ event Log4(uint256 indexed, uint256 indexed);
function EmitLog1(uint256[] memory v) public {
for (uint256 i = 0; i < v.length; i++) {
@@ -23,4 +24,10 @@ contract LogEmitter {
emit Log3(v[i]);
}
}
+
+ function EmitLog4(uint256 v, uint256 w, uint256 c) public {
+ for (uint256 i = 0; i < c; i++) {
+ emit Log4(v, w);
+ }
+ }
}
diff --git a/core/chains/evm/headtracker/head_broadcaster_test.go b/core/chains/evm/headtracker/head_broadcaster_test.go
index d8e2f16db9f..eb4daa6fde4 100644
--- a/core/chains/evm/headtracker/head_broadcaster_test.go
+++ b/core/chains/evm/headtracker/head_broadcaster_test.go
@@ -12,8 +12,7 @@ import (
"github.com/smartcontractkit/chainlink-common/pkg/logger"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
-
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
commonhtrk "github.com/smartcontractkit/chainlink/v2/common/headtracker"
commonmocks "github.com/smartcontractkit/chainlink/v2/common/types/mocks"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/headtracker"
@@ -73,7 +72,7 @@ func TestHeadBroadcaster_Subscribe(t *testing.T) {
orm := headtracker.NewORM(db, logger, cfg.Database(), *ethClient.ConfiguredChainID())
hs := headtracker.NewHeadSaver(logger, orm, evmCfg.EVM(), evmCfg.EVM().HeadTracker())
- mailMon := mailbox.NewMonitor(t.Name())
+ mailMon := mailboxtest.NewMonitor(t)
servicetest.Run(t, mailMon)
hb := headtracker.NewHeadBroadcaster(logger)
servicetest.Run(t, hb)
diff --git a/core/chains/evm/headtracker/head_tracker_test.go b/core/chains/evm/headtracker/head_tracker_test.go
index 8d86633d375..38cbe1fbfe4 100644
--- a/core/chains/evm/headtracker/head_tracker_test.go
+++ b/core/chains/evm/headtracker/head_tracker_test.go
@@ -23,6 +23,7 @@ import (
"github.com/smartcontractkit/chainlink-common/pkg/logger"
"github.com/smartcontractkit/chainlink-common/pkg/services"
"github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
commonmocks "github.com/smartcontractkit/chainlink/v2/common/types/mocks"
evmclient "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
@@ -994,7 +995,7 @@ func createHeadTracker(t *testing.T, ethClient evmclient.Client, config headtrac
lggr := logger.Test(t)
hb := headtracker.NewHeadBroadcaster(lggr)
hs := headtracker.NewHeadSaver(lggr, orm, config, htConfig)
- mailMon := mailbox.NewMonitor(t.Name())
+ mailMon := mailboxtest.NewMonitor(t)
return &headTrackerUniverse{
mu: new(sync.Mutex),
headTracker: headtracker.NewHeadTracker(lggr, ethClient, config, htConfig, hb, hs, mailMon),
@@ -1009,7 +1010,7 @@ func createHeadTrackerWithNeverSleeper(t *testing.T, ethClient evmclient.Client,
lggr := logger.Test(t)
hb := headtracker.NewHeadBroadcaster(lggr)
hs := headtracker.NewHeadSaver(lggr, orm, evmcfg.EVM(), evmcfg.EVM().HeadTracker())
- mailMon := mailbox.NewMonitor(t.Name())
+ mailMon := mailboxtest.NewMonitor(t)
ht := headtracker.NewHeadTracker(lggr, ethClient, evmcfg.EVM(), evmcfg.EVM().HeadTracker(), hb, hs, mailMon)
_, err := hs.Load(testutils.Context(t))
require.NoError(t, err)
@@ -1027,7 +1028,7 @@ func createHeadTrackerWithChecker(t *testing.T, ethClient evmclient.Client, conf
hb := headtracker.NewHeadBroadcaster(lggr)
hs := headtracker.NewHeadSaver(lggr, orm, config, htConfig)
hb.Subscribe(checker)
- mailMon := mailbox.NewMonitor(t.Name())
+ mailMon := mailboxtest.NewMonitor(t)
ht := headtracker.NewHeadTracker(lggr, ethClient, config, htConfig, hb, hs, mailMon)
return &headTrackerUniverse{
mu: new(sync.Mutex),
diff --git a/core/chains/evm/log/helpers_test.go b/core/chains/evm/log/helpers_test.go
index de8ff024b84..35db8f7f7bf 100644
--- a/core/chains/evm/log/helpers_test.go
+++ b/core/chains/evm/log/helpers_test.go
@@ -22,7 +22,7 @@ import (
"github.com/smartcontractkit/chainlink-common/pkg/logger"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
evmclient "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
evmclimocks "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client/mocks"
@@ -90,7 +90,7 @@ func newBroadcasterHelperWithEthClient(t *testing.T, ethClient evmclient.Client,
})
config := evmtest.NewChainScopedConfig(t, globalConfig)
lggr := logger.Test(t)
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
db := pgtest.NewSqlxDB(t)
orm := log.NewORM(db, lggr, config.Database(), cltest.FixtureChainID)
diff --git a/core/chains/evm/log/integration_test.go b/core/chains/evm/log/integration_test.go
index aa261854709..02a30c6d93f 100644
--- a/core/chains/evm/log/integration_test.go
+++ b/core/chains/evm/log/integration_test.go
@@ -18,7 +18,7 @@ import (
"github.com/smartcontractkit/chainlink-common/pkg/logger"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
evmclimocks "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client/mocks"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/log"
@@ -1326,7 +1326,7 @@ func TestBroadcaster_AppendLogChannel(t *testing.T) {
ch3 := make(chan types.Log)
ethClient := evmtest.NewEthClientMockWithDefaultChain(t)
- mailMon := servicetest.RunHealthy(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.RunHealthy(t, mailboxtest.NewMonitor(t))
lb := log.NewBroadcaster(nil, ethClient, nil, logger.Test(t), nil, mailMon)
chCombined := lb.ExportedAppendLogChannel(ch1, ch2)
chCombined = lb.ExportedAppendLogChannel(chCombined, ch3)
diff --git a/core/cmd/shell.go b/core/cmd/shell.go
index 3810559cf34..e4711646cb4 100644
--- a/core/cmd/shell.go
+++ b/core/cmd/shell.go
@@ -154,7 +154,7 @@ func (n ChainlinkAppFactory) NewApplication(ctx context.Context, cfg chainlink.G
}
keyStore := keystore.New(db, utils.GetScryptParams(cfg), appLggr, cfg.Database())
- mailMon := mailbox.NewMonitor(cfg.AppID().String())
+ mailMon := mailbox.NewMonitor(cfg.AppID().String(), appLggr.Named("Mailbox"))
dbListener := cfg.Database().Listener()
eventBroadcaster := pg.NewEventBroadcaster(cfg.Database().URL(), dbListener.MinReconnectInterval(), dbListener.MaxReconnectDuration(), appLggr, cfg.AppID())
diff --git a/core/gethwrappers/generated/log_emitter/log_emitter.go b/core/gethwrappers/generated/log_emitter/log_emitter.go
index 3cb11da5125..24fef257af3 100644
--- a/core/gethwrappers/generated/log_emitter/log_emitter.go
+++ b/core/gethwrappers/generated/log_emitter/log_emitter.go
@@ -31,8 +31,8 @@ var (
)
var LogEmitterMetaData = &bind.MetaData{
- ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"Log1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"Log2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"Log3\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"v\",\"type\":\"uint256[]\"}],\"name\":\"EmitLog1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"v\",\"type\":\"uint256[]\"}],\"name\":\"EmitLog2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"v\",\"type\":\"string[]\"}],\"name\":\"EmitLog3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561001057600080fd5b5061052b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063696933c914610046578063bc253bc01461005b578063d9c21f461461006e575b600080fd5b610059610054366004610269565b610081565b005b610059610069366004610269565b6100f5565b61005961007c3660046102ff565b610159565b60005b81518110156100f1577f46692c0e59ca9cd1ad8f984a9d11715ec83424398b7eed4e05c8ce84662415a88282815181106100c0576100c0610424565b60200260200101516040516100d791815260200190565b60405180910390a1806100e981610453565b915050610084565b5050565b60005b81518110156100f15781818151811061011357610113610424565b60200260200101517f624fb00c2ce79f34cb543884c3af64816dce0f4cec3d32661959e49d488a7a9360405160405180910390a28061015181610453565b9150506100f8565b60005b81518110156100f1577fb94ec34dfe32a8a7170992a093976368d1e63decf8f0bc0b38a8eb89cc9f95cf82828151811061019857610198610424565b60200260200101516040516101ad91906104b2565b60405180910390a1806101bf81610453565b91505061015c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561023d5761023d6101c7565b604052919050565b600067ffffffffffffffff82111561025f5761025f6101c7565b5060051b60200190565b6000602080838503121561027c57600080fd5b823567ffffffffffffffff81111561029357600080fd5b8301601f810185136102a457600080fd5b80356102b76102b282610245565b6101f6565b81815260059190911b820183019083810190878311156102d657600080fd5b928401925b828410156102f4578335825292840192908401906102db565b979650505050505050565b6000602080838503121561031257600080fd5b823567ffffffffffffffff8082111561032a57600080fd5b8185019150601f868184011261033f57600080fd5b823561034d6102b282610245565b81815260059190911b8401850190858101908983111561036c57600080fd5b8686015b83811015610416578035868111156103885760008081fd5b8701603f81018c1361039a5760008081fd5b888101356040888211156103b0576103b06101c7565b6103df8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a850116016101f6565b8281528e828486010111156103f45760008081fd5b828285018d83013760009281018c019290925250845250918701918701610370565b509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036104ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600060208083528351808285015260005b818110156104df578581018301518582016040015282016104c3565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509291505056fea164736f6c6343000813000a",
+ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"Log1\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"Log2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"Log3\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"Log4\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"v\",\"type\":\"uint256[]\"}],\"name\":\"EmitLog1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"v\",\"type\":\"uint256[]\"}],\"name\":\"EmitLog2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"v\",\"type\":\"string[]\"}],\"name\":\"EmitLog3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"v\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"w\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"c\",\"type\":\"uint256\"}],\"name\":\"EmitLog4\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
+ Bin: "0x608060405234801561001057600080fd5b506105c5806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063696933c914610051578063b4b12d9814610066578063bc253bc014610079578063d9c21f461461008c575b600080fd5b61006461005f3660046102d7565b61009f565b005b61006461007436600461036d565b610113565b6100646100873660046102d7565b610163565b61006461009a366004610399565b6101c7565b60005b815181101561010f577f46692c0e59ca9cd1ad8f984a9d11715ec83424398b7eed4e05c8ce84662415a88282815181106100de576100de6104be565b60200260200101516040516100f591815260200190565b60405180910390a180610107816104ed565b9150506100a2565b5050565b60005b8181101561015d57604051839085907fba21d5b63d64546cb4ab29e370a8972bf26f78cb0c395391b4f451699fdfdc5d90600090a380610155816104ed565b915050610116565b50505050565b60005b815181101561010f57818181518110610181576101816104be565b60200260200101517f624fb00c2ce79f34cb543884c3af64816dce0f4cec3d32661959e49d488a7a9360405160405180910390a2806101bf816104ed565b915050610166565b60005b815181101561010f577fb94ec34dfe32a8a7170992a093976368d1e63decf8f0bc0b38a8eb89cc9f95cf828281518110610206576102066104be565b602002602001015160405161021b919061054c565b60405180910390a18061022d816104ed565b9150506101ca565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156102ab576102ab610235565b604052919050565b600067ffffffffffffffff8211156102cd576102cd610235565b5060051b60200190565b600060208083850312156102ea57600080fd5b823567ffffffffffffffff81111561030157600080fd5b8301601f8101851361031257600080fd5b8035610325610320826102b3565b610264565b81815260059190911b8201830190838101908783111561034457600080fd5b928401925b8284101561036257833582529284019290840190610349565b979650505050505050565b60008060006060848603121561038257600080fd5b505081359360208301359350604090920135919050565b600060208083850312156103ac57600080fd5b823567ffffffffffffffff808211156103c457600080fd5b8185019150601f86818401126103d957600080fd5b82356103e7610320826102b3565b81815260059190911b8401850190858101908983111561040657600080fd5b8686015b838110156104b0578035868111156104225760008081fd5b8701603f81018c136104345760008081fd5b8881013560408882111561044a5761044a610235565b6104798b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a85011601610264565b8281528e8284860101111561048e5760008081fd5b828285018d83013760009281018c01929092525084525091870191870161040a565b509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610545577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600060208083528351808285015260005b818110156105795785810183015185820160400152820161055d565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509291505056fea164736f6c6343000813000a",
}
var LogEmitterABI = LogEmitterMetaData.ABI
@@ -207,6 +207,18 @@ func (_LogEmitter *LogEmitterTransactorSession) EmitLog3(v []string) (*types.Tra
return _LogEmitter.Contract.EmitLog3(&_LogEmitter.TransactOpts, v)
}
+func (_LogEmitter *LogEmitterTransactor) EmitLog4(opts *bind.TransactOpts, v *big.Int, w *big.Int, c *big.Int) (*types.Transaction, error) {
+ return _LogEmitter.contract.Transact(opts, "EmitLog4", v, w, c)
+}
+
+func (_LogEmitter *LogEmitterSession) EmitLog4(v *big.Int, w *big.Int, c *big.Int) (*types.Transaction, error) {
+ return _LogEmitter.Contract.EmitLog4(&_LogEmitter.TransactOpts, v, w, c)
+}
+
+func (_LogEmitter *LogEmitterTransactorSession) EmitLog4(v *big.Int, w *big.Int, c *big.Int) (*types.Transaction, error) {
+ return _LogEmitter.Contract.EmitLog4(&_LogEmitter.TransactOpts, v, w, c)
+}
+
type LogEmitterLog1Iterator struct {
Event *LogEmitterLog1
@@ -568,6 +580,142 @@ func (_LogEmitter *LogEmitterFilterer) ParseLog3(log types.Log) (*LogEmitterLog3
return event, nil
}
+type LogEmitterLog4Iterator struct {
+ Event *LogEmitterLog4
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *LogEmitterLog4Iterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(LogEmitterLog4)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(LogEmitterLog4)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *LogEmitterLog4Iterator) Error() error {
+ return it.fail
+}
+
+func (it *LogEmitterLog4Iterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type LogEmitterLog4 struct {
+ Arg0 *big.Int
+ Arg1 *big.Int
+ Raw types.Log
+}
+
+func (_LogEmitter *LogEmitterFilterer) FilterLog4(opts *bind.FilterOpts, arg0 []*big.Int, arg1 []*big.Int) (*LogEmitterLog4Iterator, error) {
+
+ var arg0Rule []interface{}
+ for _, arg0Item := range arg0 {
+ arg0Rule = append(arg0Rule, arg0Item)
+ }
+ var arg1Rule []interface{}
+ for _, arg1Item := range arg1 {
+ arg1Rule = append(arg1Rule, arg1Item)
+ }
+
+ logs, sub, err := _LogEmitter.contract.FilterLogs(opts, "Log4", arg0Rule, arg1Rule)
+ if err != nil {
+ return nil, err
+ }
+ return &LogEmitterLog4Iterator{contract: _LogEmitter.contract, event: "Log4", logs: logs, sub: sub}, nil
+}
+
+func (_LogEmitter *LogEmitterFilterer) WatchLog4(opts *bind.WatchOpts, sink chan<- *LogEmitterLog4, arg0 []*big.Int, arg1 []*big.Int) (event.Subscription, error) {
+
+ var arg0Rule []interface{}
+ for _, arg0Item := range arg0 {
+ arg0Rule = append(arg0Rule, arg0Item)
+ }
+ var arg1Rule []interface{}
+ for _, arg1Item := range arg1 {
+ arg1Rule = append(arg1Rule, arg1Item)
+ }
+
+ logs, sub, err := _LogEmitter.contract.WatchLogs(opts, "Log4", arg0Rule, arg1Rule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(LogEmitterLog4)
+ if err := _LogEmitter.contract.UnpackLog(event, "Log4", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_LogEmitter *LogEmitterFilterer) ParseLog4(log types.Log) (*LogEmitterLog4, error) {
+ event := new(LogEmitterLog4)
+ if err := _LogEmitter.contract.UnpackLog(event, "Log4", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
func (_LogEmitter *LogEmitter) ParseLog(log types.Log) (generated.AbigenLog, error) {
switch log.Topics[0] {
case _LogEmitter.abi.Events["Log1"].ID:
@@ -576,6 +724,8 @@ func (_LogEmitter *LogEmitter) ParseLog(log types.Log) (generated.AbigenLog, err
return _LogEmitter.ParseLog2(log)
case _LogEmitter.abi.Events["Log3"].ID:
return _LogEmitter.ParseLog3(log)
+ case _LogEmitter.abi.Events["Log4"].ID:
+ return _LogEmitter.ParseLog4(log)
default:
return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0])
@@ -594,6 +744,10 @@ func (LogEmitterLog3) Topic() common.Hash {
return common.HexToHash("0xb94ec34dfe32a8a7170992a093976368d1e63decf8f0bc0b38a8eb89cc9f95cf")
}
+func (LogEmitterLog4) Topic() common.Hash {
+ return common.HexToHash("0xba21d5b63d64546cb4ab29e370a8972bf26f78cb0c395391b4f451699fdfdc5d")
+}
+
func (_LogEmitter *LogEmitter) Address() common.Address {
return _LogEmitter.address
}
@@ -605,6 +759,8 @@ type LogEmitterInterface interface {
EmitLog3(opts *bind.TransactOpts, v []string) (*types.Transaction, error)
+ EmitLog4(opts *bind.TransactOpts, v *big.Int, w *big.Int, c *big.Int) (*types.Transaction, error)
+
FilterLog1(opts *bind.FilterOpts) (*LogEmitterLog1Iterator, error)
WatchLog1(opts *bind.WatchOpts, sink chan<- *LogEmitterLog1) (event.Subscription, error)
@@ -623,6 +779,12 @@ type LogEmitterInterface interface {
ParseLog3(log types.Log) (*LogEmitterLog3, error)
+ FilterLog4(opts *bind.FilterOpts, arg0 []*big.Int, arg1 []*big.Int) (*LogEmitterLog4Iterator, error)
+
+ WatchLog4(opts *bind.WatchOpts, sink chan<- *LogEmitterLog4, arg0 []*big.Int, arg1 []*big.Int) (event.Subscription, error)
+
+ ParseLog4(log types.Log) (*LogEmitterLog4, error)
+
ParseLog(log types.Log) (generated.AbigenLog, error)
Address() common.Address
diff --git a/core/gethwrappers/generated/simple_log_upkeep_counter_wrapper/simple_log_upkeep_counter_wrapper.go b/core/gethwrappers/generated/simple_log_upkeep_counter_wrapper/simple_log_upkeep_counter_wrapper.go
index bb28c8bd6c4..f834fa69118 100644
--- a/core/gethwrappers/generated/simple_log_upkeep_counter_wrapper/simple_log_upkeep_counter_wrapper.go
+++ b/core/gethwrappers/generated/simple_log_upkeep_counter_wrapper/simple_log_upkeep_counter_wrapper.go
@@ -30,6 +30,12 @@ var (
_ = abi.ConvertType
)
+type CheckData struct {
+ CheckBurnAmount *big.Int
+ PerformBurnAmount *big.Int
+ EventSig [32]byte
+}
+
type Log struct {
Index *big.Int
Timestamp *big.Int
@@ -42,8 +48,8 @@ type Log struct {
}
var SimpleLogUpkeepCounterMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lastBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"counter\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeToPerform\",\"type\":\"uint256\"}],\"name\":\"PerformingUpkeep\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structLog\",\"name\":\"log\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"checkLog\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"counter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"}],\"name\":\"performUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"previousPerformBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timeToPerform\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561001057600080fd5b5060006001819055438155600281905560035561088a806100326000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806361bc221a1161005b57806361bc221a146100d4578063806b984f146100dd578063917d895f146100e6578063c6066f0d146100ef57600080fd5b80632cb158641461008257806340691db41461009e5780634585e33b146100bf575b600080fd5b61008b60025481565b6040519081526020015b60405180910390f35b6100b16100ac366004610384565b6100f8565b60405161009592919061055e565b6100d26100cd366004610312565b61012a565b005b61008b60035481565b61008b60005481565b61008b60015481565b61008b60045481565b6000606060018460405160200161010f91906105db565b604051602081830303815290604052915091505b9250929050565b60025461013657436002555b436000556003546101489060016107f0565b6003556000805460015561015e828401846103f1565b90508060200151426101709190610808565b6004819055600254600054600154600354604080519485526020850193909352918301526060820152608081019190915232907f4874b8dd61a40fe23599b4360a9a824d7081742fca9f555bcee3d389c4f4bd659060a00160405180910390a2505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101f957600080fd5b919050565b600082601f83011261020f57600080fd5b8135602067ffffffffffffffff82111561022b5761022b61084e565b8160051b61023a8282016106d6565b83815282810190868401838801850189101561025557600080fd5b600093505b8584101561027857803583526001939093019291840191840161025a565b50979650505050505050565b600082601f83011261029557600080fd5b813567ffffffffffffffff8111156102af576102af61084e565b6102e060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016106d6565b8181528460208386010111156102f557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806020838503121561032557600080fd5b823567ffffffffffffffff8082111561033d57600080fd5b818501915085601f83011261035157600080fd5b81358181111561036057600080fd5b86602082850101111561037257600080fd5b60209290920196919550909350505050565b6000806040838503121561039757600080fd5b823567ffffffffffffffff808211156103af57600080fd5b9084019061010082870312156103c457600080fd5b909250602084013590808211156103da57600080fd5b506103e785828601610284565b9150509250929050565b60006020828403121561040357600080fd5b813567ffffffffffffffff8082111561041b57600080fd5b90830190610100828603121561043057600080fd5b6104386106ac565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015261047060a084016101d5565b60a082015260c08301358281111561048757600080fd5b610493878286016101fe565b60c08301525060e0830135828111156104ab57600080fd5b6104b787828601610284565b60e08301525095945050505050565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156104f857600080fd5b8260051b8083602087013760009401602001938452509192915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b821515815260006020604081840152835180604085015260005b8181101561059457858101830151858201606001528201610578565b818111156105a6576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201606001949350505050565b6020815281356020820152602082013560408201526040820135606082015260608201356080820152608082013560a082015273ffffffffffffffffffffffffffffffffffffffff61062f60a084016101d5565b1660c0820152600061064460c0840184610725565b6101008060e086015261065c610120860183856104c6565b925061066b60e087018761078c565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086850301828701526106a1848483610515565b979650505050505050565b604051610100810167ffffffffffffffff811182821017156106d0576106d061084e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561071d5761071d61084e565b604052919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261075a57600080fd5b830160208101925035905067ffffffffffffffff81111561077a57600080fd5b8060051b360383131561012357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126107c157600080fd5b830160208101925035905067ffffffffffffffff8111156107e157600080fd5b80360383131561012357600080fd5b600082198211156108035761080361081f565b500190565b60008282101561081a5761081a61081f565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c6343000806000a",
+ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lastBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"counter\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeToPerform\",\"type\":\"uint256\"}],\"name\":\"PerformingUpkeep\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"checkBurnAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"performBurnAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"eventSig\",\"type\":\"bytes32\"}],\"internalType\":\"structCheckData\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"_checkDataConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structLog\",\"name\":\"log\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"}],\"name\":\"checkLog\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"counter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"dummyMap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"}],\"name\":\"performUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"previousPerformBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timeToPerform\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
+ Bin: "0x608060405234801561001057600080fd5b5060006002819055436001556003819055600455610c63806100336000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80636977947311610076578063806b984f1161005b578063806b984f14610147578063917d895f14610150578063c6066f0d1461015957600080fd5b806369779473146101035780637145f11b1461011457600080fd5b80632cb15864146100a857806340691db4146100c45780634585e33b146100e557806361bc221a146100fa575b600080fd5b6100b160035481565b6040519081526020015b60405180910390f35b6100d76100d236600461062d565b610162565b6040516100bb92919061088b565b6100f86100f336600461058f565b610296565b005b6100b160045481565b6100f86101113660046105d1565b50565b610137610122366004610576565b60006020819052908152604090205460ff1681565b60405190151581526020016100bb565b6100b160015481565b6100b160025481565b6100b160055481565b6000606081808061017586880188610799565b92509250925060005a9050600061018d600143610bb2565b409050600085156101fc575b855a6101a59085610bb2565b10156101fc578080156101c6575060008281526020819052604090205460ff165b60408051602081018590523091810191909152909150606001604051602081830303815290604052805190602001209150610199565b8361020a60c08d018d6109ee565b600281811061021b5761021b610bf8565b90506020020135141561025d5760018b8b8b60405160200161023f93929190610908565b6040516020818303038152906040529750975050505050505061028e565b60008b8b8b60405160200161027493929190610908565b604051602081830303815290604052975097505050505050505b935093915050565b6003546102a257436003555b4360019081556004546102b491610b9a565b6004556001546002556000806102cc8385018561069f565b915091508160200151426102e09190610bb2565b6005819055506000806000838060200190518101906102ff91906107c5565b92509250925060005a90506000610317600143610bb2565b40905060008415610386575b845a61032f9085610bb2565b101561038657808015610350575060008281526020819052604090205460ff165b60408051602081018590523091810191909152909150606001604051602081830303815290604052805190602001209150610323565b600354600154600254600454600554604080519586526020860194909452928401919091526060830152608082015232907f4874b8dd61a40fe23599b4360a9a824d7081742fca9f555bcee3d389c4f4bd659060a00160405180910390a250505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461041457600080fd5b919050565b600082601f83011261042a57600080fd5b8135602067ffffffffffffffff82111561044657610446610c27565b8160051b610455828201610a80565b83815282810190868401838801850189101561047057600080fd5b600093505b85841015610493578035835260019390930192918401918401610475565b50979650505050505050565b60008083601f8401126104b157600080fd5b50813567ffffffffffffffff8111156104c957600080fd5b6020830191508360208285010111156104e157600080fd5b9250929050565b600082601f8301126104f957600080fd5b813567ffffffffffffffff81111561051357610513610c27565b61054460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610a80565b81815284602083860101111561055957600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561058857600080fd5b5035919050565b600080602083850312156105a257600080fd5b823567ffffffffffffffff8111156105b957600080fd5b6105c58582860161049f565b90969095509350505050565b6000606082840312156105e357600080fd5b6040516060810181811067ffffffffffffffff8211171561060657610606610c27565b80604052508235815260208301356020820152604083013560408201528091505092915050565b60008060006040848603121561064257600080fd5b833567ffffffffffffffff8082111561065a57600080fd5b90850190610100828803121561066f57600080fd5b9093506020850135908082111561068557600080fd5b506106928682870161049f565b9497909650939450505050565b600080604083850312156106b257600080fd5b823567ffffffffffffffff808211156106ca57600080fd5b9084019061010082870312156106df57600080fd5b6106e7610a56565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015261071f60a084016103f0565b60a082015260c08301358281111561073657600080fd5b61074288828601610419565b60c08301525060e08301358281111561075a57600080fd5b610766888286016104e8565b60e0830152509350602085013591508082111561078257600080fd5b5061078f858286016104e8565b9150509250929050565b6000806000606084860312156107ae57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156107da57600080fd5b8351925060208401519150604084015190509250925092565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561082557600080fd5b8260051b8083602087013760009401602001938452509192915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b821515815260006020604081840152835180604085015260005b818110156108c1578581018301518582016060015282016108a5565b818111156108d3576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201606001949350505050565b60408152833560408201526020840135606082015260408401356080820152606084013560a0820152608084013560c082015273ffffffffffffffffffffffffffffffffffffffff61095c60a086016103f0565b1660e0820152600061097160c0860186610acf565b61010084810152610987610140850182846107f3565b91505061099760e0870187610b36565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0858403016101208601526109cd838284610842565b9250505082810360208401526109e4818587610842565b9695505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610a2357600080fd5b83018035915067ffffffffffffffff821115610a3e57600080fd5b6020019150600581901b36038213156104e157600080fd5b604051610100810167ffffffffffffffff81118282101715610a7a57610a7a610c27565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610ac757610ac7610c27565b604052919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610b0457600080fd5b830160208101925035905067ffffffffffffffff811115610b2457600080fd5b8060051b36038313156104e157600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610b6b57600080fd5b830160208101925035905067ffffffffffffffff811115610b8b57600080fd5b8036038313156104e157600080fd5b60008219821115610bad57610bad610bc9565b500190565b600082821015610bc457610bc4610bc9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c6343000806000a",
}
var SimpleLogUpkeepCounterABI = SimpleLogUpkeepCounterMetaData.ABI
@@ -182,9 +188,9 @@ func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterTransactorRaw) Transact(opt
return _SimpleLogUpkeepCounter.Contract.contract.Transact(opts, method, params...)
}
-func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCaller) CheckLog(opts *bind.CallOpts, log Log, arg1 []byte) (bool, []byte, error) {
+func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCaller) CheckLog(opts *bind.CallOpts, log Log, checkData []byte) (bool, []byte, error) {
var out []interface{}
- err := _SimpleLogUpkeepCounter.contract.Call(opts, &out, "checkLog", log, arg1)
+ err := _SimpleLogUpkeepCounter.contract.Call(opts, &out, "checkLog", log, checkData)
if err != nil {
return *new(bool), *new([]byte), err
@@ -197,12 +203,12 @@ func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCaller) CheckLog(opts *bind
}
-func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterSession) CheckLog(log Log, arg1 []byte) (bool, []byte, error) {
- return _SimpleLogUpkeepCounter.Contract.CheckLog(&_SimpleLogUpkeepCounter.CallOpts, log, arg1)
+func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterSession) CheckLog(log Log, checkData []byte) (bool, []byte, error) {
+ return _SimpleLogUpkeepCounter.Contract.CheckLog(&_SimpleLogUpkeepCounter.CallOpts, log, checkData)
}
-func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCallerSession) CheckLog(log Log, arg1 []byte) (bool, []byte, error) {
- return _SimpleLogUpkeepCounter.Contract.CheckLog(&_SimpleLogUpkeepCounter.CallOpts, log, arg1)
+func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCallerSession) CheckLog(log Log, checkData []byte) (bool, []byte, error) {
+ return _SimpleLogUpkeepCounter.Contract.CheckLog(&_SimpleLogUpkeepCounter.CallOpts, log, checkData)
}
func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCaller) Counter(opts *bind.CallOpts) (*big.Int, error) {
@@ -227,6 +233,28 @@ func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCallerSession) Counter() (*
return _SimpleLogUpkeepCounter.Contract.Counter(&_SimpleLogUpkeepCounter.CallOpts)
}
+func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCaller) DummyMap(opts *bind.CallOpts, arg0 [32]byte) (bool, error) {
+ var out []interface{}
+ err := _SimpleLogUpkeepCounter.contract.Call(opts, &out, "dummyMap", arg0)
+
+ if err != nil {
+ return *new(bool), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+ return out0, err
+
+}
+
+func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterSession) DummyMap(arg0 [32]byte) (bool, error) {
+ return _SimpleLogUpkeepCounter.Contract.DummyMap(&_SimpleLogUpkeepCounter.CallOpts, arg0)
+}
+
+func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCallerSession) DummyMap(arg0 [32]byte) (bool, error) {
+ return _SimpleLogUpkeepCounter.Contract.DummyMap(&_SimpleLogUpkeepCounter.CallOpts, arg0)
+}
+
func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCaller) InitialBlock(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
err := _SimpleLogUpkeepCounter.contract.Call(opts, &out, "initialBlock")
@@ -315,6 +343,18 @@ func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterCallerSession) TimeToPerfor
return _SimpleLogUpkeepCounter.Contract.TimeToPerform(&_SimpleLogUpkeepCounter.CallOpts)
}
+func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterTransactor) CheckDataConfig(opts *bind.TransactOpts, arg0 CheckData) (*types.Transaction, error) {
+ return _SimpleLogUpkeepCounter.contract.Transact(opts, "_checkDataConfig", arg0)
+}
+
+func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterSession) CheckDataConfig(arg0 CheckData) (*types.Transaction, error) {
+ return _SimpleLogUpkeepCounter.Contract.CheckDataConfig(&_SimpleLogUpkeepCounter.TransactOpts, arg0)
+}
+
+func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterTransactorSession) CheckDataConfig(arg0 CheckData) (*types.Transaction, error) {
+ return _SimpleLogUpkeepCounter.Contract.CheckDataConfig(&_SimpleLogUpkeepCounter.TransactOpts, arg0)
+}
+
func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounterTransactor) PerformUpkeep(opts *bind.TransactOpts, performData []byte) (*types.Transaction, error) {
return _SimpleLogUpkeepCounter.contract.Transact(opts, "performUpkeep", performData)
}
@@ -478,10 +518,12 @@ func (_SimpleLogUpkeepCounter *SimpleLogUpkeepCounter) Address() common.Address
}
type SimpleLogUpkeepCounterInterface interface {
- CheckLog(opts *bind.CallOpts, log Log, arg1 []byte) (bool, []byte, error)
+ CheckLog(opts *bind.CallOpts, log Log, checkData []byte) (bool, []byte, error)
Counter(opts *bind.CallOpts) (*big.Int, error)
+ DummyMap(opts *bind.CallOpts, arg0 [32]byte) (bool, error)
+
InitialBlock(opts *bind.CallOpts) (*big.Int, error)
LastBlock(opts *bind.CallOpts) (*big.Int, error)
@@ -490,6 +532,8 @@ type SimpleLogUpkeepCounterInterface interface {
TimeToPerform(opts *bind.CallOpts) (*big.Int, error)
+ CheckDataConfig(opts *bind.TransactOpts, arg0 CheckData) (*types.Transaction, error)
+
PerformUpkeep(opts *bind.TransactOpts, performData []byte) (*types.Transaction, error)
FilterPerformingUpkeep(opts *bind.FilterOpts, from []common.Address) (*SimpleLogUpkeepCounterPerformingUpkeepIterator, error)
diff --git a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
index 5e9dcfc3326..819ef8d23e1 100644
--- a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
+++ b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
@@ -38,7 +38,7 @@ keeper_registry_wrapper1_3: ../../contracts/solc/v0.8.6/KeeperRegistry1_3/Keeper
keeper_registry_wrapper2_0: ../../contracts/solc/v0.8.6/KeeperRegistry2_0/KeeperRegistry2_0.abi ../../contracts/solc/v0.8.6/KeeperRegistry2_0/KeeperRegistry2_0.bin c32dea7d5ef66b7c58ddc84ddf69aa44df1b3ae8601fbc271c95be4ff5853056
keeper_registry_wrapper_2_1: ../../contracts/solc/v0.8.16/KeeperRegistry2_1/KeeperRegistry2_1.abi ../../contracts/solc/v0.8.16/KeeperRegistry2_1/KeeperRegistry2_1.bin 604e4a0cd980c713929b523b999462a3aa0ed06f96ff563a4c8566cf59c8445b
keepers_vrf_consumer: ../../contracts/solc/v0.8.6/KeepersVRFConsumer/KeepersVRFConsumer.abi ../../contracts/solc/v0.8.6/KeepersVRFConsumer/KeepersVRFConsumer.bin fa75572e689c9e84705c63e8dbe1b7b8aa1a8fe82d66356c4873d024bb9166e8
-log_emitter: ../../contracts/solc/v0.8.19/LogEmitter/LogEmitter.abi ../../contracts/solc/v0.8.19/LogEmitter/LogEmitter.bin 244ba13730c036de0b02beef4e3d9c9a96946ce353c27f366baecc7f5be5a6fd
+log_emitter: ../../contracts/solc/v0.8.19/LogEmitter/LogEmitter.abi ../../contracts/solc/v0.8.19/LogEmitter/LogEmitter.bin 4b129ab93432c95ff9143f0631323e189887668889e0b36ccccf18a571e41ccf
log_triggered_streams_lookup_wrapper: ../../contracts/solc/v0.8.16/LogTriggeredStreamsLookup/LogTriggeredStreamsLookup.abi ../../contracts/solc/v0.8.16/LogTriggeredStreamsLookup/LogTriggeredStreamsLookup.bin f8da43a927c1a66238a9f4fd5d5dd7e280e361daa0444da1f7f79498ace901e1
log_upkeep_counter_wrapper: ../../contracts/solc/v0.8.6/LogUpkeepCounter/LogUpkeepCounter.abi ../../contracts/solc/v0.8.6/LogUpkeepCounter/LogUpkeepCounter.bin 42426bbb83f96dfbe55fc576d6c65020eaeed690e2289cf99b0c4aa810a5f4ec
mock_aggregator_proxy: ../../contracts/solc/v0.8.6/MockAggregatorProxy/MockAggregatorProxy.abi ../../contracts/solc/v0.8.6/MockAggregatorProxy/MockAggregatorProxy.bin b16c108f3dd384c342ddff5e94da7c0a8d39d1be5e3d8f2cf61ecc7f0e50ff42
@@ -50,7 +50,7 @@ operator_factory: ../../contracts/solc/v0.8.19/OperatorFactory/OperatorFactory.a
operator_wrapper: ../../contracts/solc/v0.8.19/Operator/Operator.abi ../../contracts/solc/v0.8.19/Operator/Operator.bin c5e1db81070d940a82ef100b0bce38e055593cbeebbc73abf9d45c30d6020cd2
oracle_wrapper: ../../contracts/solc/v0.6/Oracle/Oracle.abi ../../contracts/solc/v0.6/Oracle/Oracle.bin 7af2fbac22a6e8c2847e8e685a5400cac5101d72ddf5365213beb79e4dede43a
perform_data_checker_wrapper: ../../contracts/solc/v0.8.16/PerformDataChecker/PerformDataChecker.abi ../../contracts/solc/v0.8.16/PerformDataChecker/PerformDataChecker.bin 48d8309c2117c29a24e1155917ab0b780956b2cd6a8a39ef06ae66a7f6d94f73
-simple_log_upkeep_counter_wrapper: ../../contracts/solc/v0.8.6/SimpleLogUpkeepCounter/SimpleLogUpkeepCounter.abi ../../contracts/solc/v0.8.6/SimpleLogUpkeepCounter/SimpleLogUpkeepCounter.bin 0a7a0cc4da7dc2a3d0a0c36c746b1adc044af5cad1838367356a0604f3255a01
+simple_log_upkeep_counter_wrapper: ../../contracts/solc/v0.8.6/SimpleLogUpkeepCounter/SimpleLogUpkeepCounter.abi ../../contracts/solc/v0.8.6/SimpleLogUpkeepCounter/SimpleLogUpkeepCounter.bin b7bbd30531eefcaf2c30546cbc5eab10c68257dbc03f0e09c0ed85febfce786b
solidity_vrf_consumer_interface: ../../contracts/solc/v0.6/VRFConsumer/VRFConsumer.abi ../../contracts/solc/v0.6/VRFConsumer/VRFConsumer.bin ecc99378aa798014de9db42b2eb81320778b0663dbe208008dad75ccdc1d4366
solidity_vrf_consumer_interface_v08: ../../contracts/solc/v0.8.6/VRFConsumer/VRFConsumer.abi ../../contracts/solc/v0.8.6/VRFConsumer/VRFConsumer.bin b14f9136b15e3dc9d6154d5700f3ed4cf88ddc4f70f20c3bb57fc46050904c8f
solidity_vrf_coordinator_interface: ../../contracts/solc/v0.6/VRFCoordinator/VRFCoordinator.abi ../../contracts/solc/v0.6/VRFCoordinator/VRFCoordinator.bin a23d3c395156804788c7f6fbda2994e8f7184304c0f0c9f2c4ddeaf073d346d2
diff --git a/core/internal/cltest/cltest.go b/core/internal/cltest/cltest.go
index 625221dffca..fceb58ccdab 100644
--- a/core/internal/cltest/cltest.go
+++ b/core/internal/cltest/cltest.go
@@ -342,7 +342,7 @@ func NewApplicationWithConfig(t testing.TB, cfg chainlink.GeneralConfig, flagsAn
keyStore := keystore.NewInMemory(db, utils.FastScryptParams, lggr, cfg.Database())
- mailMon := mailbox.NewMonitor(cfg.AppID().String())
+ mailMon := mailbox.NewMonitor(cfg.AppID().String(), lggr.Named("Mailbox"))
loopRegistry := plugins.NewLoopRegistry(lggr, nil)
mercuryPool := wsrpc.NewPool(lggr, cache.Config{
diff --git a/core/internal/testutils/evmtest/evmtest.go b/core/internal/testutils/evmtest/evmtest.go
index eb1a03530ae..9397db53acb 100644
--- a/core/internal/testutils/evmtest/evmtest.go
+++ b/core/internal/testutils/evmtest/evmtest.go
@@ -18,6 +18,7 @@ import (
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
"github.com/smartcontractkit/chainlink-common/pkg/types"
"github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
commonmocks "github.com/smartcontractkit/chainlink/v2/common/types/mocks"
"github.com/smartcontractkit/chainlink/v2/core/chains"
@@ -81,8 +82,9 @@ func NewChainRelayExtenders(t testing.TB, testopts TestChainOpts) *evmrelay.Chai
func NewChainRelayExtOpts(t testing.TB, testopts TestChainOpts) legacyevm.ChainRelayExtenderConfig {
require.NotNil(t, testopts.KeyStore)
+ lggr := logger.TestLogger(t)
opts := legacyevm.ChainRelayExtenderConfig{
- Logger: logger.TestLogger(t),
+ Logger: lggr,
KeyStore: testopts.KeyStore,
ChainOpts: legacyevm.ChainOpts{
AppConfig: testopts.GeneralConfig,
@@ -119,7 +121,7 @@ func NewChainRelayExtOpts(t testing.TB, testopts TestChainOpts) legacyevm.ChainR
}
}
if opts.MailMon == nil {
- opts.MailMon = servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ opts.MailMon = servicetest.Run(t, mailboxtest.NewMonitor(t))
}
if testopts.GasEstimator != nil {
opts.GenGasEstimator = func(*big.Int) gas.EvmFeeEstimator {
diff --git a/core/scripts/go.mod b/core/scripts/go.mod
index d8b4dc5bf10..0d640068412 100644
--- a/core/scripts/go.mod
+++ b/core/scripts/go.mod
@@ -59,7 +59,6 @@ require (
github.com/blendle/zapdriver v1.3.1 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
github.com/btcsuite/btcd/btcutil v1.1.3 // indirect
- github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
github.com/bytedance/sonic v1.10.1 // indirect
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
@@ -236,12 +235,12 @@ require (
github.com/shirou/gopsutil/v3 v3.23.11 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704 // indirect
- github.com/smartcontractkit/chainlink-common v0.1.7-0.20231215140606-ff77a2a4fa04 // indirect
- github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231206164210-03f8b219402e // indirect
+ github.com/smartcontractkit/chainlink-common v0.1.7-0.20231219165257-be61f25afdab // indirect
+ github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231218175426-6e0427c661e5 // indirect
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1 // indirect
github.com/smartcontractkit/chainlink-feeds v0.0.0-20231127231053-2232d3a6766d // indirect
- github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231206154215-ec1718b7df3e // indirect
- github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231205180940-ea2e3e916725 // indirect
+ github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231219140448-151a4725f312 // indirect
+ github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231219014050-0c4a7831293a // indirect
github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-9e478e5e19f1 // indirect
github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20230906073235-9e478e5e19f1 // indirect
github.com/smartcontractkit/wsrpc v0.7.2 // indirect
diff --git a/core/scripts/go.sum b/core/scripts/go.sum
index fbe2eb4c575..0bfd019b047 100644
--- a/core/scripts/go.sum
+++ b/core/scripts/go.sum
@@ -169,6 +169,7 @@ github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHf
github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc=
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M=
+github.com/btcsuite/btcd v0.23.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA=
github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY=
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
@@ -179,8 +180,9 @@ github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUB
github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ=
github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
+github.com/btcsuite/btcd/chaincfg/chainhash v1.0.3 h1:SDlJ7bAm4ewvrmZtR0DaiYbQGdKPeaaIm7bM+qRhFeU=
+github.com/btcsuite/btcd/chaincfg/chainhash v1.0.3/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
@@ -1146,18 +1148,18 @@ github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704 h1:T3lFWumv
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704/go.mod h1:2QuJdEouTWjh5BDy5o/vgGXQtR4Gz8yH1IYB5eT7u4M=
github.com/smartcontractkit/chainlink-automation v1.0.1 h1:vVjBFq2Zsz21kPy1Pb0wpjF9zrbJX+zjXphDeeR4XZk=
github.com/smartcontractkit/chainlink-automation v1.0.1/go.mod h1:INSchkV3ntyDdlZKGWA030MPDpp6pbeuiRkRKYFCm2k=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20231215140606-ff77a2a4fa04 h1:NaSOne2euXdm5AtLAtbSNrs6adExQNUWUkbeVE8Eb4s=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20231215140606-ff77a2a4fa04/go.mod h1:IdlfCN9rUs8Q/hrOYe8McNBIwEOHEsi0jilb3Cw77xs=
-github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231206164210-03f8b219402e h1:xvqffqFec2HkEcUKrCkm4FDJRnn/+gHmvrE/dz3Zlw8=
-github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231206164210-03f8b219402e/go.mod h1:soVgcl4CbfR6hC9UptjuCQhz19HJaFEjwnOpiySkxg0=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20231219165257-be61f25afdab h1:6ckB261FRUy4K/OfSfWCQLAGkgfVLYT5PKDImmp3tZM=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20231219165257-be61f25afdab/go.mod h1:IdlfCN9rUs8Q/hrOYe8McNBIwEOHEsi0jilb3Cw77xs=
+github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231218175426-6e0427c661e5 h1:kBnmjv3fxU7krVIqZFvo1m4F6qBc4vPURQFX/mcChhI=
+github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231218175426-6e0427c661e5/go.mod h1:EoM7wQ81mov7wsUzG4zEnnr0EH0POEo/I0hRDg433TU=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1 h1:xYqRgZO0nMSO8CBCMR0r3WA+LZ4kNL8a6bnbyk/oBtQ=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1/go.mod h1:GuPvyXryvbiUZIHmPeLBz4L+yJKeyGUjrDfd1KNne+o=
github.com/smartcontractkit/chainlink-feeds v0.0.0-20231127231053-2232d3a6766d h1:w4MsbOtNk6nD/mcXLstHWk9hB6g7QLtcAfhPjhwvOaQ=
github.com/smartcontractkit/chainlink-feeds v0.0.0-20231127231053-2232d3a6766d/go.mod h1:YPAfLNowdBwiKiYOwgwtbJHi8AJWbcxkbOY0ItAvkfc=
-github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231206154215-ec1718b7df3e h1:/tCHhoAJM+ittEHPZTtJsAgXmYujKiDW0ub9HXW9qtY=
-github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231206154215-ec1718b7df3e/go.mod h1:9YIi413QRRytafTzpWm+Z+5NWBNxSqokhKyeEZ3ynlA=
-github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231205180940-ea2e3e916725 h1:NbhPVwxx+53WN/Uld1V6c4iLgoGvUYFOsVd2kfcexe8=
-github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231205180940-ea2e3e916725/go.mod h1:vHrPBipRL52NdPp77KXNU2k1IoCUa1B33N9otZQPYko=
+github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231219140448-151a4725f312 h1:ziqC+WW/2/UI6w3DShy7HGzJMWWLIYHT5ev2Qaa3h6I=
+github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231219140448-151a4725f312/go.mod h1:vqnojBNdzHNI6asWezJlottUiVEXudMEGf2Mz5R+xps=
+github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231219014050-0c4a7831293a h1:atCXqF8e5U2zfEaA87cKJs+K1MAbOVh3V05gEd60fR0=
+github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231219014050-0c4a7831293a/go.mod h1:YWKpf+hO9XMlzIWQT8yGoky3aeFLzMUVsjbs80LD77M=
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868 h1:FFdvEzlYwcuVHkdZ8YnZR/XomeMGbz5E2F2HZI3I3w8=
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868/go.mod h1:Kn1Hape05UzFZ7bOUnm3GVsHzP0TNrVmpfXYNHdqGGs=
github.com/smartcontractkit/go-plugin v0.0.0-20231003134350-e49dad63b306 h1:ko88+ZznniNJZbZPWAvHQU8SwKAdHngdDZ+pvVgB5ss=
diff --git a/core/services/directrequest/delegate_test.go b/core/services/directrequest/delegate_test.go
index be61cde4d60..3b80ba2f915 100644
--- a/core/services/directrequest/delegate_test.go
+++ b/core/services/directrequest/delegate_test.go
@@ -15,7 +15,7 @@ import (
"github.com/smartcontractkit/chainlink-common/pkg/assets"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
"github.com/smartcontractkit/chainlink/v2/core/bridges"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/log"
@@ -45,7 +45,7 @@ func TestDelegate_ServicesForSpec(t *testing.T) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
})
keyStore := cltest.NewKeyStore(t, db, cfg.Database())
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
relayerExtenders := evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg, Client: ethClient, MailMon: mailMon, KeyStore: keyStore.Eth()})
lggr := logger.TestLogger(t)
@@ -82,7 +82,7 @@ func NewDirectRequestUniverseWithConfig(t *testing.T, cfg chainlink.GeneralConfi
runner := pipeline_mocks.NewRunner(t)
broadcaster.On("AddDependents", 1)
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
db := pgtest.NewSqlxDB(t)
keyStore := cltest.NewKeyStore(t, db, cfg.Database())
diff --git a/core/services/functions/listener_test.go b/core/services/functions/listener_test.go
index 07bd82ed288..5d26f9a4f57 100644
--- a/core/services/functions/listener_test.go
+++ b/core/services/functions/listener_test.go
@@ -20,7 +20,7 @@ import (
decryptionPlugin "github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
log_mocks "github.com/smartcontractkit/chainlink/v2/core/chains/evm/log/mocks"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
@@ -82,7 +82,7 @@ func NewFunctionsListenerUniverse(t *testing.T, timeoutSec int, pruneFrequencySe
ethClient := evmtest.NewEthClientMockWithDefaultChain(t)
broadcaster := log_mocks.NewBroadcaster(t)
broadcaster.On("AddDependents", 1)
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
db := pgtest.NewSqlxDB(t)
kst := cltest.NewKeyStore(t, db, cfg.Database())
diff --git a/core/services/job/runner_integration_test.go b/core/services/job/runner_integration_test.go
index 14a5c41b396..27c0e0e8515 100644
--- a/core/services/job/runner_integration_test.go
+++ b/core/services/job/runner_integration_test.go
@@ -24,7 +24,7 @@ import (
"gopkg.in/guregu/null.v4"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
"github.com/smartcontractkit/chainlink/v2/core/auth"
"github.com/smartcontractkit/chainlink/v2/core/bridges"
@@ -462,7 +462,7 @@ answer1 [type=median index=0];
legacyChains,
lggr,
config.Database(),
- servicetest.Run(t, mailbox.NewMonitor(t.Name())),
+ servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
_, err = sd.ServicesForSpec(jb)
require.NoError(t, err)
@@ -496,7 +496,7 @@ answer1 [type=median index=0];
legacyChains,
lggr,
config.Database(),
- servicetest.Run(t, mailbox.NewMonitor(t.Name())),
+ servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
_, err = sd.ServicesForSpec(jb)
require.NoError(t, err)
@@ -524,7 +524,7 @@ answer1 [type=median index=0];
legacyChains,
lggr,
config.Database(),
- servicetest.Run(t, mailbox.NewMonitor(t.Name())),
+ servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
_, err = sd.ServicesForSpec(jb)
require.NoError(t, err)
@@ -579,7 +579,7 @@ answer1 [type=median index=0];
legacyChains,
lggr,
config.Database(),
- servicetest.Run(t, mailbox.NewMonitor(t.Name())),
+ servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
jb.OCROracleSpec.CaptureEATelemetry = tc.jbCaptureEATelemetry
@@ -623,7 +623,7 @@ answer1 [type=median index=0];
legacyChains,
lggr,
config.Database(),
- servicetest.Run(t, mailbox.NewMonitor(t.Name())),
+ servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
services, err := sd.ServicesForSpec(*jb)
require.NoError(t, err)
diff --git a/core/services/job/spawner_test.go b/core/services/job/spawner_test.go
index b82aa73c0b5..335156a8c65 100644
--- a/core/services/job/spawner_test.go
+++ b/core/services/job/spawner_test.go
@@ -14,7 +14,7 @@ import (
"github.com/smartcontractkit/chainlink-common/pkg/loop"
"github.com/smartcontractkit/chainlink-common/pkg/services"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
"github.com/smartcontractkit/chainlink/v2/core/bridges"
mocklp "github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller/mocks"
@@ -129,7 +129,7 @@ func TestSpawner_CreateJobDeleteJob(t *testing.T) {
serviceA2 := mocks.NewServiceCtx(t)
serviceA1.On("Start", mock.Anything).Return(nil).Once()
serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyA.ItHappened() })
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
dA := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config.Database(), mailMon)
delegateA := &delegate{jobA.Type, []job.ServiceCtx{serviceA1, serviceA2}, 0, make(chan struct{}), dA}
@@ -188,7 +188,7 @@ func TestSpawner_CreateJobDeleteJob(t *testing.T) {
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.Database(), config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db, lggr, config.Database()), keyStore, config.Database())
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
d := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config.Database(), mailMon)
delegateA := &delegate{jobA.Type, []job.ServiceCtx{serviceA1, serviceA2}, 0, nil, d}
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
@@ -222,7 +222,7 @@ func TestSpawner_CreateJobDeleteJob(t *testing.T) {
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.Database(), config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db, lggr, config.Database()), keyStore, config.Database())
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
d := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config.Database(), mailMon)
delegateA := &delegate{jobA.Type, []job.ServiceCtx{serviceA1, serviceA2}, 0, nil, d}
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
@@ -300,7 +300,7 @@ func TestSpawner_CreateJobDeleteJob(t *testing.T) {
jobOCR2VRF := makeOCR2VRFJobSpec(t, keyStore, config, address, chain.ID(), 2)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.Database(), config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db, lggr, config.Database()), keyStore, config.Database())
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
processConfig := plugins.NewRegistrarConfig(loop.GRPCOpts{}, func(name string) (*plugins.RegisteredLoop, error) { return nil, nil })
ocr2DelegateConfig := ocr2.NewDelegateConfig(config.OCR2(), config.Mercury(), config.Threshold(), config.Insecure(), config.JobPipeline(), config.Database(), processConfig)
diff --git a/core/services/keeper/registry_synchronizer_helper_test.go b/core/services/keeper/registry_synchronizer_helper_test.go
index dff97202f6c..19ba2eedbbb 100644
--- a/core/services/keeper/registry_synchronizer_helper_test.go
+++ b/core/services/keeper/registry_synchronizer_helper_test.go
@@ -11,7 +11,7 @@ import (
"github.com/jmoiron/sqlx"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
evmclimocks "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client/mocks"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/log"
@@ -73,7 +73,7 @@ func setupRegistrySync(t *testing.T, version keeper.RegistryVersion) (
})).Maybe().Return(func() {})
lbMock.On("IsConnected").Return(true).Maybe()
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
orm := keeper.NewORM(db, logger.TestLogger(t), ch.Config().Database())
synchronizer := keeper.NewRegistrySynchronizer(keeper.RegistrySynchronizerOptions{
diff --git a/core/services/ocr/contract_tracker_test.go b/core/services/ocr/contract_tracker_test.go
index f7ebbe08481..185a9cd3197 100644
--- a/core/services/ocr/contract_tracker_test.go
+++ b/core/services/ocr/contract_tracker_test.go
@@ -16,7 +16,7 @@ import (
ocrtypes "github.com/smartcontractkit/libocr/offchainreporting/types"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
commonmocks "github.com/smartcontractkit/chainlink/v2/common/mocks"
evmclimocks "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client/mocks"
@@ -84,7 +84,7 @@ func newContractTrackerUni(t *testing.T, opts ...interface{}) (uni contractTrack
uni.hb = commonmocks.NewHeadBroadcaster[*evmtypes.Head, common.Hash](t)
uni.ec = evmtest.NewEthClientMock(t)
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
db := pgtest.NewSqlxDB(t)
uni.tracker = ocr.NewOCRContractTracker(
contract,
diff --git a/core/services/ocr2/delegate.go b/core/services/ocr2/delegate.go
index 1b7be2b7f0e..3136de44b8f 100644
--- a/core/services/ocr2/delegate.go
+++ b/core/services/ocr2/delegate.go
@@ -441,7 +441,7 @@ func (d *Delegate) ServicesForSpec(jb job.Job) ([]job.ServiceCtx, error) {
return d.newServicesOCR2VRF(lggr, jb, bootstrapPeers, kb, ocrDB, lc)
case types.OCR2Keeper:
- return d.newServicesOCR2Keepers(lggr, jb, bootstrapPeers, kb, ocrDB, lc, ocrLogger)
+ return d.newServicesOCR2Keepers(ctx, lggr, jb, bootstrapPeers, kb, ocrDB, lc, ocrLogger)
case types.Functions:
const (
@@ -1026,6 +1026,7 @@ func (d *Delegate) newServicesOCR2VRF(
}
func (d *Delegate) newServicesOCR2Keepers(
+ ctx context.Context,
lggr logger.SugaredLogger,
jb job.Job,
bootstrapPeers []commontypes.BootstrapperLocator,
@@ -1046,7 +1047,7 @@ func (d *Delegate) newServicesOCR2Keepers(
switch cfg.ContractVersion {
case "v2.1":
- return d.newServicesOCR2Keepers21(lggr, jb, bootstrapPeers, kb, ocrDB, lc, ocrLogger, cfg, spec)
+ return d.newServicesOCR2Keepers21(ctx, lggr, jb, bootstrapPeers, kb, ocrDB, lc, ocrLogger, cfg, spec)
case "v2.0":
return d.newServicesOCR2Keepers20(lggr, jb, bootstrapPeers, kb, ocrDB, lc, ocrLogger, cfg, spec)
default:
@@ -1055,6 +1056,7 @@ func (d *Delegate) newServicesOCR2Keepers(
}
func (d *Delegate) newServicesOCR2Keepers21(
+ ctx context.Context,
lggr logger.SugaredLogger,
jb job.Job,
bootstrapPeers []commontypes.BootstrapperLocator,
@@ -1079,14 +1081,41 @@ func (d *Delegate) newServicesOCR2Keepers21(
return nil, fmt.Errorf("keeper2 services: expected EVM relayer got %s", rid.Network)
}
- chain, err2 := d.legacyChains.Get(rid.ChainID)
- if err2 != nil {
- return nil, fmt.Errorf("keeper2 services: failed to get chain %s: %w", rid.ChainID, err2)
+ transmitterID := spec.TransmitterID.String
+ relayer, err := d.RelayGetter.Get(rid)
+ if err != nil {
+ return nil, ErrRelayNotEnabled{Err: err, Relay: spec.Relay, PluginName: "ocr2keepers"}
}
- keeperProvider, services, err2 := ocr2keeper.EVMDependencies21(jb, d.db, lggr, chain, mc, kb, d.cfg.Database(), d.ethKs)
- if err2 != nil {
- return nil, errors.Wrap(err2, "could not build dependencies for ocr2 keepers")
+ provider, err := relayer.NewPluginProvider(ctx,
+ types.RelayArgs{
+ ExternalJobID: jb.ExternalJobID,
+ JobID: jb.ID,
+ ContractID: spec.ContractID,
+ New: d.isNewlyCreatedJob,
+ RelayConfig: spec.RelayConfig.Bytes(),
+ ProviderType: string(spec.PluginType),
+ }, types.PluginArgs{
+ TransmitterID: transmitterID,
+ PluginConfig: spec.PluginConfig.Bytes(),
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ keeperProvider, ok := provider.(types.AutomationProvider)
+ if !ok {
+ return nil, errors.New("could not coerce PluginProvider to AutomationProvider")
+ }
+
+ chain, err := d.legacyChains.Get(rid.ChainID)
+ if err != nil {
+ return nil, fmt.Errorf("keeper2 services: failed to get chain %s: %w", rid.ChainID, err)
+ }
+
+ services, err := ocr2keeper.EVMDependencies21(jb, d.db, lggr, chain, mc, kb, d.cfg.Database())
+ if err != nil {
+ return nil, errors.Wrap(err, "could not build dependencies for ocr2 keepers")
}
// set some defaults
conf := ocr2keepers21config.ReportingFactoryConfig{
diff --git a/core/services/ocr2/plugins/ocr2keeper/util.go b/core/services/ocr2/plugins/ocr2keeper/util.go
index c3c60ad58b1..199bbac0536 100644
--- a/core/services/ocr2/plugins/ocr2keeper/util.go
+++ b/core/services/ocr2/plugins/ocr2keeper/util.go
@@ -3,6 +3,10 @@ package ocr2keeper
import (
"fmt"
+ "github.com/smartcontractkit/chainlink-common/pkg/types"
+ "github.com/smartcontractkit/chainlink/v2/core/services/keystore"
+ evmrelay "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm"
+
"github.com/jmoiron/sqlx"
ocrtypes "github.com/smartcontractkit/libocr/offchainreporting2plus/types"
@@ -12,19 +16,16 @@ import (
ocr2keepers20polling "github.com/smartcontractkit/chainlink-automation/pkg/v2/observer/polling"
ocr2keepers20runner "github.com/smartcontractkit/chainlink-automation/pkg/v2/runner"
ocr2keepers21 "github.com/smartcontractkit/chainlink-automation/pkg/v3/types"
- "github.com/smartcontractkit/chainlink-common/pkg/types"
"github.com/smartcontractkit/chainlink/v2/core/chains/legacyevm"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/job"
- "github.com/smartcontractkit/chainlink/v2/core/services/keystore"
"github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/ethkey"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/models"
evmregistry20 "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20"
evmregistry21 "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21"
evmregistry21transmit "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit"
"github.com/smartcontractkit/chainlink/v2/core/services/pg"
- evmrelay "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm"
)
type Encoder20 interface {
@@ -115,24 +116,18 @@ func EVMDependencies21(
mc *models.MercuryCredentials,
keyring ocrtypes.OnchainKeyring,
dbCfg pg.QConfig,
- ethKeystore keystore.Eth,
-) (evmrelay.OCR2KeeperProvider, evmregistry21.AutomationServices, error) {
+) (evmregistry21.AutomationServices, error) {
var err error
- var keeperProvider evmrelay.OCR2KeeperProvider
oSpec := spec.OCR2OracleSpec
- // the provider will be returned as a dependency
- if keeperProvider, err = EVMProvider(db, chain, lggr, spec, ethKeystore); err != nil {
- return nil, nil, err
- }
rAddr := ethkey.MustEIP55Address(oSpec.ContractID).Address()
services, err := evmregistry21.New(rAddr, chain, mc, keyring, lggr, db, dbCfg)
if err != nil {
- return nil, nil, err
+ return nil, err
}
- return keeperProvider, services, err
+ return services, err
}
func FilterNamesFromSpec21(spec *job.OCR2OracleSpec) (names []string, err error) {
diff --git a/core/services/relay/evm/evm.go b/core/services/relay/evm/evm.go
index 303cdd3ba0e..08e25dba545 100644
--- a/core/services/relay/evm/evm.go
+++ b/core/services/relay/evm/evm.go
@@ -503,6 +503,13 @@ func (r *Relayer) NewMedianProvider(rargs commontypes.RelayArgs, pargs commontyp
return &medianProvider, nil
}
+func (r *Relayer) NewAutomationProvider(rargs commontypes.RelayArgs, pargs commontypes.PluginArgs) (commontypes.AutomationProvider, error) {
+ lggr := r.lggr.Named("AutomationProvider").Named(rargs.ExternalJobID.String())
+ ocr2keeperRelayer := NewOCR2KeeperRelayer(r.db, r.chain, lggr.Named("OCR2KeeperRelayer"), r.ks.Eth())
+
+ return ocr2keeperRelayer.NewOCR2KeeperProvider(rargs, pargs)
+}
+
var _ commontypes.MedianProvider = (*medianProvider)(nil)
type medianProvider struct {
diff --git a/core/services/relay/relay.go b/core/services/relay/relay.go
index eb6d3faf4fd..118d5935851 100644
--- a/core/services/relay/relay.go
+++ b/core/services/relay/relay.go
@@ -88,7 +88,9 @@ func (r *ServerAdapter) NewPluginProvider(ctx context.Context, rargs types.Relay
return r.NewFunctionsProvider(ctx, rargs, pargs)
case types.Mercury:
return r.NewMercuryProvider(ctx, rargs, pargs)
- case types.DKG, types.OCR2VRF, types.OCR2Keeper, types.GenericPlugin:
+ case types.OCR2Keeper:
+ return r.NewAutomationProvider(ctx, rargs, pargs)
+ case types.DKG, types.OCR2VRF, types.GenericPlugin:
return r.RelayerAdapter.NewPluginProvider(ctx, rargs, pargs)
case types.CCIPCommit, types.CCIPExecution:
return nil, fmt.Errorf("provider type not supported: %s", rargs.ProviderType)
diff --git a/core/services/relay/relay_test.go b/core/services/relay/relay_test.go
index d23895699df..40a11518edd 100644
--- a/core/services/relay/relay_test.go
+++ b/core/services/relay/relay_test.go
@@ -97,6 +97,10 @@ type staticMercuryProvider struct {
types.MercuryProvider
}
+type staticAutomationProvider struct {
+ types.AutomationProvider
+}
+
type mockRelayer struct {
types.Relayer
}
@@ -113,6 +117,10 @@ func (m *mockRelayer) NewMercuryProvider(rargs types.RelayArgs, pargs types.Plug
return staticMercuryProvider{}, nil
}
+func (m *mockRelayer) NewAutomationProvider(rargs types.RelayArgs, pargs types.PluginArgs) (types.AutomationProvider, error) {
+ return staticAutomationProvider{}, nil
+}
+
type mockRelayerExt struct {
loop.RelayerExt
}
diff --git a/core/services/vrf/delegate_test.go b/core/services/vrf/delegate_test.go
index 8e9e77bd358..591ca3e9508 100644
--- a/core/services/vrf/delegate_test.go
+++ b/core/services/vrf/delegate_test.go
@@ -15,7 +15,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/smartcontractkit/chainlink-common/pkg/services/servicetest"
- "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox/mailboxtest"
"github.com/smartcontractkit/chainlink/v2/core/bridges"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets"
@@ -151,7 +151,7 @@ func setup(t *testing.T) (vrfUniverse, *v1.Listener, job.Job) {
cfg := configtest.NewTestGeneralConfig(t)
vuni := buildVrfUni(t, db, cfg)
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
vd := vrf.NewDelegate(
db,
@@ -677,7 +677,7 @@ func Test_VRFV2PlusServiceFailsWhenVRFOwnerProvided(t *testing.T) {
cfg := configtest.NewTestGeneralConfig(t)
vuni := buildVrfUni(t, db, cfg)
- mailMon := servicetest.Run(t, mailbox.NewMonitor(t.Name()))
+ mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
vd := vrf.NewDelegate(
db,
diff --git a/core/web/testdata/body/health.html b/core/web/testdata/body/health.html
index 5999891a0f6..f6c1d6c80c8 100644
--- a/core/web/testdata/body/health.html
+++ b/core/web/testdata/body/health.html
@@ -73,13 +73,16 @@
JobSpawner
- Mercury
+ Mailbox
- WSRPCPool
+ Monitor
- Monitor
+ Mercury
+
+ WSRPCPool
+
PipelineORM
diff --git a/core/web/testdata/body/health.json b/core/web/testdata/body/health.json
index d8418560543..004988fceba 100644
--- a/core/web/testdata/body/health.json
+++ b/core/web/testdata/body/health.json
@@ -110,18 +110,18 @@
},
{
"type": "checks",
- "id": "Mercury.WSRPCPool",
+ "id": "Mailbox.Monitor",
"attributes": {
- "name": "Mercury.WSRPCPool",
+ "name": "Mailbox.Monitor",
"status": "passing",
"output": ""
}
},
{
"type": "checks",
- "id": "Monitor",
+ "id": "Mercury.WSRPCPool",
"attributes": {
- "name": "Monitor",
+ "name": "Mercury.WSRPCPool",
"status": "passing",
"output": ""
}
diff --git a/core/web/testdata/body/health.txt b/core/web/testdata/body/health.txt
index 5b636829587..0dfa86abad0 100644
--- a/core/web/testdata/body/health.txt
+++ b/core/web/testdata/body/health.txt
@@ -11,8 +11,8 @@
-EVM.0.Txm.Confirmer
-EVM.0.Txm.WrappedEvmEstimator
-JobSpawner
+-Mailbox.Monitor
-Mercury.WSRPCPool
--Monitor
-PipelineORM
-PipelineRunner
-PromReporter
diff --git a/go.mod b/go.mod
index debe6fc3436..6e67bbd9a52 100644
--- a/go.mod
+++ b/go.mod
@@ -65,12 +65,12 @@ require (
github.com/shopspring/decimal v1.3.1
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704
github.com/smartcontractkit/chainlink-automation v1.0.1
- github.com/smartcontractkit/chainlink-common v0.1.7-0.20231215140606-ff77a2a4fa04
- github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231206164210-03f8b219402e
+ github.com/smartcontractkit/chainlink-common v0.1.7-0.20231219165257-be61f25afdab
+ github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231218175426-6e0427c661e5
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1
github.com/smartcontractkit/chainlink-feeds v0.0.0-20231127231053-2232d3a6766d
- github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231206154215-ec1718b7df3e
- github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231205180940-ea2e3e916725
+ github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231219140448-151a4725f312
+ github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231219014050-0c4a7831293a
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868
github.com/smartcontractkit/libocr v0.0.0-20231130143053-c5102a9c0fb7
github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-9e478e5e19f1
@@ -128,7 +128,6 @@ require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect
github.com/blendle/zapdriver v1.3.1 // indirect
- github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
github.com/bytedance/sonic v1.10.1 // indirect
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
diff --git a/go.sum b/go.sum
index 2227765efa4..037bcc95225 100644
--- a/go.sum
+++ b/go.sum
@@ -176,8 +176,8 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf
github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ=
github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
+github.com/btcsuite/btcd/chaincfg/chainhash v1.0.3 h1:SDlJ7bAm4ewvrmZtR0DaiYbQGdKPeaaIm7bM+qRhFeU=
+github.com/btcsuite/btcd/chaincfg/chainhash v1.0.3/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA=
github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
@@ -1134,18 +1134,18 @@ github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704 h1:T3lFWumv
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704/go.mod h1:2QuJdEouTWjh5BDy5o/vgGXQtR4Gz8yH1IYB5eT7u4M=
github.com/smartcontractkit/chainlink-automation v1.0.1 h1:vVjBFq2Zsz21kPy1Pb0wpjF9zrbJX+zjXphDeeR4XZk=
github.com/smartcontractkit/chainlink-automation v1.0.1/go.mod h1:INSchkV3ntyDdlZKGWA030MPDpp6pbeuiRkRKYFCm2k=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20231215140606-ff77a2a4fa04 h1:NaSOne2euXdm5AtLAtbSNrs6adExQNUWUkbeVE8Eb4s=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20231215140606-ff77a2a4fa04/go.mod h1:IdlfCN9rUs8Q/hrOYe8McNBIwEOHEsi0jilb3Cw77xs=
-github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231206164210-03f8b219402e h1:xvqffqFec2HkEcUKrCkm4FDJRnn/+gHmvrE/dz3Zlw8=
-github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231206164210-03f8b219402e/go.mod h1:soVgcl4CbfR6hC9UptjuCQhz19HJaFEjwnOpiySkxg0=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20231219165257-be61f25afdab h1:6ckB261FRUy4K/OfSfWCQLAGkgfVLYT5PKDImmp3tZM=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20231219165257-be61f25afdab/go.mod h1:IdlfCN9rUs8Q/hrOYe8McNBIwEOHEsi0jilb3Cw77xs=
+github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231218175426-6e0427c661e5 h1:kBnmjv3fxU7krVIqZFvo1m4F6qBc4vPURQFX/mcChhI=
+github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231218175426-6e0427c661e5/go.mod h1:EoM7wQ81mov7wsUzG4zEnnr0EH0POEo/I0hRDg433TU=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1 h1:xYqRgZO0nMSO8CBCMR0r3WA+LZ4kNL8a6bnbyk/oBtQ=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1/go.mod h1:GuPvyXryvbiUZIHmPeLBz4L+yJKeyGUjrDfd1KNne+o=
github.com/smartcontractkit/chainlink-feeds v0.0.0-20231127231053-2232d3a6766d h1:w4MsbOtNk6nD/mcXLstHWk9hB6g7QLtcAfhPjhwvOaQ=
github.com/smartcontractkit/chainlink-feeds v0.0.0-20231127231053-2232d3a6766d/go.mod h1:YPAfLNowdBwiKiYOwgwtbJHi8AJWbcxkbOY0ItAvkfc=
-github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231206154215-ec1718b7df3e h1:/tCHhoAJM+ittEHPZTtJsAgXmYujKiDW0ub9HXW9qtY=
-github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231206154215-ec1718b7df3e/go.mod h1:9YIi413QRRytafTzpWm+Z+5NWBNxSqokhKyeEZ3ynlA=
-github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231205180940-ea2e3e916725 h1:NbhPVwxx+53WN/Uld1V6c4iLgoGvUYFOsVd2kfcexe8=
-github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231205180940-ea2e3e916725/go.mod h1:vHrPBipRL52NdPp77KXNU2k1IoCUa1B33N9otZQPYko=
+github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231219140448-151a4725f312 h1:ziqC+WW/2/UI6w3DShy7HGzJMWWLIYHT5ev2Qaa3h6I=
+github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231219140448-151a4725f312/go.mod h1:vqnojBNdzHNI6asWezJlottUiVEXudMEGf2Mz5R+xps=
+github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231219014050-0c4a7831293a h1:atCXqF8e5U2zfEaA87cKJs+K1MAbOVh3V05gEd60fR0=
+github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231219014050-0c4a7831293a/go.mod h1:YWKpf+hO9XMlzIWQT8yGoky3aeFLzMUVsjbs80LD77M=
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868 h1:FFdvEzlYwcuVHkdZ8YnZR/XomeMGbz5E2F2HZI3I3w8=
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868/go.mod h1:Kn1Hape05UzFZ7bOUnm3GVsHzP0TNrVmpfXYNHdqGGs=
github.com/smartcontractkit/go-plugin v0.0.0-20231003134350-e49dad63b306 h1:ko88+ZznniNJZbZPWAvHQU8SwKAdHngdDZ+pvVgB5ss=
diff --git a/integration-tests/contracts/contract_models.go b/integration-tests/contracts/contract_models.go
index 4c8d610fa1b..3d738033d68 100644
--- a/integration-tests/contracts/contract_models.go
+++ b/integration-tests/contracts/contract_models.go
@@ -405,6 +405,7 @@ type LogEmitter interface {
Address() common.Address
EmitLogInts(ints []int) (*types.Transaction, error)
EmitLogIntsIndexed(ints []int) (*types.Transaction, error)
+ EmitLogIntMultiIndexed(ints int, ints2 int, count int) (*types.Transaction, error)
EmitLogStrings(strings []string) (*types.Transaction, error)
EmitLogInt(payload int) (*types.Transaction, error)
EmitLogIntIndexed(payload int) (*types.Transaction, error)
diff --git a/integration-tests/contracts/contract_vrf_models.go b/integration-tests/contracts/contract_vrf_models.go
index 548cac252b1..8a217e26766 100644
--- a/integration-tests/contracts/contract_vrf_models.go
+++ b/integration-tests/contracts/contract_vrf_models.go
@@ -54,10 +54,13 @@ type VRFCoordinatorV2 interface {
Address() string
GetSubscription(ctx context.Context, subID uint64) (vrf_coordinator_v2.GetSubscription, error)
PendingRequestsExist(ctx context.Context, subID uint64) (bool, error)
+ OwnerCancelSubscription(subID uint64) (*types.Transaction, error)
CancelSubscription(subID uint64, to common.Address) (*types.Transaction, error)
FindSubscriptionID(subID uint64) (uint64, error)
WaitForRandomWordsFulfilledEvent(requestID []*big.Int, timeout time.Duration) (*vrf_coordinator_v2.VRFCoordinatorV2RandomWordsFulfilled, error)
WaitForRandomWordsRequestedEvent(keyHash [][32]byte, subID []uint64, sender []common.Address, timeout time.Duration) (*vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested, error)
+ WaitForSubscriptionCanceledEvent(subID []uint64, timeout time.Duration) (*vrf_coordinator_v2.VRFCoordinatorV2SubscriptionCanceled, error)
+ OracleWithdraw(recipient common.Address, amount *big.Int) error
}
type VRFCoordinatorV2_5 interface {
diff --git a/integration-tests/contracts/ethereum_vrfv2_contracts.go b/integration-tests/contracts/ethereum_vrfv2_contracts.go
index d1637c93c87..5d22167158a 100644
--- a/integration-tests/contracts/ethereum_vrfv2_contracts.go
+++ b/integration-tests/contracts/ethereum_vrfv2_contracts.go
@@ -224,6 +224,37 @@ func (v *EthereumVRFCoordinatorV2) PendingRequestsExist(ctx context.Context, sub
return pendingRequestExists, nil
}
+func (v *EthereumVRFCoordinatorV2) OracleWithdraw(recipient common.Address, amount *big.Int) error {
+ opts, err := v.client.TransactionOpts(v.client.GetDefaultWallet())
+ if err != nil {
+ return err
+ }
+ tx, err := v.coordinator.OracleWithdraw(opts, recipient, amount)
+ if err != nil {
+ return err
+ }
+ return v.client.ProcessTransaction(tx)
+}
+
+// OwnerCancelSubscription cancels subscription,
+// return funds to the subscription owner,
+// down not check if pending requests for a sub exist,
+// outstanding requests may fail onchain
+func (v *EthereumVRFCoordinatorV2) OwnerCancelSubscription(subID uint64) (*types.Transaction, error) {
+ opts, err := v.client.TransactionOpts(v.client.GetDefaultWallet())
+ if err != nil {
+ return nil, err
+ }
+ tx, err := v.coordinator.OwnerCancelSubscription(
+ opts,
+ subID,
+ )
+ if err != nil {
+ return nil, err
+ }
+ return tx, v.client.ProcessTransaction(tx)
+}
+
// CancelSubscription cancels subscription by Sub owner,
// return funds to specified address,
// checks if pending requests for a sub exist
@@ -300,6 +331,26 @@ func (v *EthereumVRFCoordinatorV2) WaitForRandomWordsRequestedEvent(keyHash [][3
}
}
+func (v *EthereumVRFCoordinatorV2) WaitForSubscriptionCanceledEvent(subID []uint64, timeout time.Duration) (*vrf_coordinator_v2.VRFCoordinatorV2SubscriptionCanceled, error) {
+ eventsChannel := make(chan *vrf_coordinator_v2.VRFCoordinatorV2SubscriptionCanceled)
+ subscription, err := v.coordinator.WatchSubscriptionCanceled(nil, eventsChannel, subID)
+ if err != nil {
+ return nil, err
+ }
+ defer subscription.Unsubscribe()
+
+ for {
+ select {
+ case err := <-subscription.Err():
+ return nil, err
+ case <-time.After(timeout):
+ return nil, fmt.Errorf("timeout waiting for SubscriptionCanceled event")
+ case sub := <-eventsChannel:
+ return sub, nil
+ }
+ }
+}
+
// GetAllRandomWords get all VRFv2 randomness output words
func (v *EthereumVRFConsumerV2) GetAllRandomWords(ctx context.Context, num int) ([]*big.Int, error) {
words := make([]*big.Int, 0)
diff --git a/integration-tests/contracts/test_contracts.go b/integration-tests/contracts/test_contracts.go
index 3080668da69..8a6d0b5be02 100644
--- a/integration-tests/contracts/test_contracts.go
+++ b/integration-tests/contracts/test_contracts.go
@@ -55,6 +55,18 @@ func (e *LogEmitterContract) EmitLogIntsIndexed(ints []int) (*types.Transaction,
return tx, e.client.ProcessTransaction(tx)
}
+func (e *LogEmitterContract) EmitLogIntMultiIndexed(ints int, ints2 int, count int) (*types.Transaction, error) {
+ opts, err := e.client.TransactionOpts(e.client.GetDefaultWallet())
+ if err != nil {
+ return nil, err
+ }
+ tx, err := e.instance.EmitLog4(opts, big.NewInt(int64(ints)), big.NewInt(int64(ints2)), big.NewInt(int64(count)))
+ if err != nil {
+ return nil, err
+ }
+ return tx, e.client.ProcessTransaction(tx)
+}
+
func (e *LogEmitterContract) EmitLogStrings(strings []string) (*types.Transaction, error) {
opts, err := e.client.TransactionOpts(e.client.GetDefaultWallet())
if err != nil {
diff --git a/integration-tests/go.mod b/integration-tests/go.mod
index 26483791271..c591004bfc1 100644
--- a/integration-tests/go.mod
+++ b/integration-tests/go.mod
@@ -24,7 +24,7 @@ require (
github.com/segmentio/ksuid v1.0.4
github.com/slack-go/slack v0.12.2
github.com/smartcontractkit/chainlink-automation v1.0.1
- github.com/smartcontractkit/chainlink-common v0.1.7-0.20231215140606-ff77a2a4fa04
+ github.com/smartcontractkit/chainlink-common v0.1.7-0.20231219165257-be61f25afdab
github.com/smartcontractkit/chainlink-testing-framework v1.22.0
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868
github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000
@@ -96,7 +96,6 @@ require (
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect
github.com/blendle/zapdriver v1.3.1 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
- github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/bytedance/sonic v1.10.1 // indirect
github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect
@@ -356,11 +355,11 @@ require (
github.com/shopspring/decimal v1.3.1 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704 // indirect
- github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231206164210-03f8b219402e // indirect
+ github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231218175426-6e0427c661e5 // indirect
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1 // indirect
github.com/smartcontractkit/chainlink-feeds v0.0.0-20231127231053-2232d3a6766d // indirect
- github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231206154215-ec1718b7df3e // indirect
- github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231205180940-ea2e3e916725 // indirect
+ github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231219140448-151a4725f312 // indirect
+ github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231219014050-0c4a7831293a // indirect
github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-9e478e5e19f1 // indirect
github.com/smartcontractkit/wsrpc v0.7.2 // indirect
github.com/soheilhy/cmux v0.1.5 // indirect
diff --git a/integration-tests/go.sum b/integration-tests/go.sum
index 82334f5d833..1aa3704bd4d 100644
--- a/integration-tests/go.sum
+++ b/integration-tests/go.sum
@@ -222,8 +222,8 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf
github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ=
github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
+github.com/btcsuite/btcd/chaincfg/chainhash v1.0.3 h1:SDlJ7bAm4ewvrmZtR0DaiYbQGdKPeaaIm7bM+qRhFeU=
+github.com/btcsuite/btcd/chaincfg/chainhash v1.0.3/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA=
github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
@@ -1465,18 +1465,18 @@ github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704 h1:T3lFWumv
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704/go.mod h1:2QuJdEouTWjh5BDy5o/vgGXQtR4Gz8yH1IYB5eT7u4M=
github.com/smartcontractkit/chainlink-automation v1.0.1 h1:vVjBFq2Zsz21kPy1Pb0wpjF9zrbJX+zjXphDeeR4XZk=
github.com/smartcontractkit/chainlink-automation v1.0.1/go.mod h1:INSchkV3ntyDdlZKGWA030MPDpp6pbeuiRkRKYFCm2k=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20231215140606-ff77a2a4fa04 h1:NaSOne2euXdm5AtLAtbSNrs6adExQNUWUkbeVE8Eb4s=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20231215140606-ff77a2a4fa04/go.mod h1:IdlfCN9rUs8Q/hrOYe8McNBIwEOHEsi0jilb3Cw77xs=
-github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231206164210-03f8b219402e h1:xvqffqFec2HkEcUKrCkm4FDJRnn/+gHmvrE/dz3Zlw8=
-github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231206164210-03f8b219402e/go.mod h1:soVgcl4CbfR6hC9UptjuCQhz19HJaFEjwnOpiySkxg0=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20231219165257-be61f25afdab h1:6ckB261FRUy4K/OfSfWCQLAGkgfVLYT5PKDImmp3tZM=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20231219165257-be61f25afdab/go.mod h1:IdlfCN9rUs8Q/hrOYe8McNBIwEOHEsi0jilb3Cw77xs=
+github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231218175426-6e0427c661e5 h1:kBnmjv3fxU7krVIqZFvo1m4F6qBc4vPURQFX/mcChhI=
+github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20231218175426-6e0427c661e5/go.mod h1:EoM7wQ81mov7wsUzG4zEnnr0EH0POEo/I0hRDg433TU=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1 h1:xYqRgZO0nMSO8CBCMR0r3WA+LZ4kNL8a6bnbyk/oBtQ=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1/go.mod h1:GuPvyXryvbiUZIHmPeLBz4L+yJKeyGUjrDfd1KNne+o=
github.com/smartcontractkit/chainlink-feeds v0.0.0-20231127231053-2232d3a6766d h1:w4MsbOtNk6nD/mcXLstHWk9hB6g7QLtcAfhPjhwvOaQ=
github.com/smartcontractkit/chainlink-feeds v0.0.0-20231127231053-2232d3a6766d/go.mod h1:YPAfLNowdBwiKiYOwgwtbJHi8AJWbcxkbOY0ItAvkfc=
-github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231206154215-ec1718b7df3e h1:/tCHhoAJM+ittEHPZTtJsAgXmYujKiDW0ub9HXW9qtY=
-github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231206154215-ec1718b7df3e/go.mod h1:9YIi413QRRytafTzpWm+Z+5NWBNxSqokhKyeEZ3ynlA=
-github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231205180940-ea2e3e916725 h1:NbhPVwxx+53WN/Uld1V6c4iLgoGvUYFOsVd2kfcexe8=
-github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231205180940-ea2e3e916725/go.mod h1:vHrPBipRL52NdPp77KXNU2k1IoCUa1B33N9otZQPYko=
+github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231219140448-151a4725f312 h1:ziqC+WW/2/UI6w3DShy7HGzJMWWLIYHT5ev2Qaa3h6I=
+github.com/smartcontractkit/chainlink-solana v1.0.3-0.20231219140448-151a4725f312/go.mod h1:vqnojBNdzHNI6asWezJlottUiVEXudMEGf2Mz5R+xps=
+github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231219014050-0c4a7831293a h1:atCXqF8e5U2zfEaA87cKJs+K1MAbOVh3V05gEd60fR0=
+github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20231219014050-0c4a7831293a/go.mod h1:YWKpf+hO9XMlzIWQT8yGoky3aeFLzMUVsjbs80LD77M=
github.com/smartcontractkit/chainlink-testing-framework v1.22.0 h1:Lur628wkrceWgcLmxGZe7Mauwxht4YO71hX9Jj5YslE=
github.com/smartcontractkit/chainlink-testing-framework v1.22.0/go.mod h1:yu6qqrppNJfutQV37fiSs4eS0uQP5QT0ebi3tlIgWN0=
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868 h1:FFdvEzlYwcuVHkdZ8YnZR/XomeMGbz5E2F2HZI3I3w8=
diff --git a/integration-tests/load/automationv2_1/automationv2_1_test.go b/integration-tests/load/automationv2_1/automationv2_1_test.go
index 5fde9befba5..8c27578c613 100644
--- a/integration-tests/load/automationv2_1/automationv2_1_test.go
+++ b/integration-tests/load/automationv2_1/automationv2_1_test.go
@@ -2,6 +2,7 @@ package automationv2_1
import (
"context"
+ "encoding/base64"
"fmt"
"math"
"math/big"
@@ -14,6 +15,7 @@ import (
geth "github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
+ "github.com/pelletier/go-toml/v2"
"github.com/slack-go/slack"
"github.com/stretchr/testify/require"
@@ -31,16 +33,15 @@ import (
"github.com/smartcontractkit/chainlink-testing-framework/logging"
"github.com/smartcontractkit/chainlink-testing-framework/networks"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/automation_utils_2_1"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/log_emitter"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/simple_log_upkeep_counter_wrapper"
-
"github.com/smartcontractkit/chainlink/integration-tests/actions"
"github.com/smartcontractkit/chainlink/integration-tests/actions/automationv2"
"github.com/smartcontractkit/chainlink/integration-tests/client"
"github.com/smartcontractkit/chainlink/integration-tests/contracts"
contractseth "github.com/smartcontractkit/chainlink/integration-tests/contracts/ethereum"
"github.com/smartcontractkit/chainlink/integration-tests/testreporters"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/automation_utils_2_1"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/log_emitter"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/simple_log_upkeep_counter_wrapper"
)
const (
@@ -77,16 +78,16 @@ ListenAddresses = ["0.0.0.0:6690"]`
minimumDbSpec = map[string]interface{}{
"resources": map[string]interface{}{
"requests": map[string]interface{}{
- "cpu": "1000m",
- "memory": "1Gi",
+ "cpu": "4000m",
+ "memory": "4Gi",
},
"limits": map[string]interface{}{
- "cpu": "1000m",
- "memory": "1Gi",
+ "cpu": "4000m",
+ "memory": "4Gi",
},
},
"stateful": true,
- "capacity": "5Gi",
+ "capacity": "10Gi",
}
recNodeSpec = map[string]interface{}{
@@ -102,58 +103,110 @@ ListenAddresses = ["0.0.0.0:6690"]`
},
}
- recDbSpec = map[string]interface{}{
- "resources": map[string]interface{}{
- "requests": map[string]interface{}{
- "cpu": "2000m",
- "memory": "2Gi",
- },
- "limits": map[string]interface{}{
- "cpu": "2000m",
- "memory": "2Gi",
- },
+ recDbSpec = minimumDbSpec
+
+ gethNodeSpec = map[string]interface{}{
+ "requests": map[string]interface{}{
+ "cpu": "8000m",
+ "memory": "8Gi",
+ },
+ "limits": map[string]interface{}{
+ "cpu": "16000m",
+ "memory": "16Gi",
},
- "stateful": true,
- "capacity": "10Gi",
}
)
var (
- numberofNodes, _ = strconv.Atoi(getEnv("NUMBEROFNODES", "6")) // Number of nodes in the DON
- numberOfUpkeeps, _ = strconv.Atoi(getEnv("NUMBEROFUPKEEPS", "100")) // Number of log triggered upkeeps
- duration, _ = strconv.Atoi(getEnv("DURATION", "900")) // Test duration in seconds
- blockTime, _ = strconv.Atoi(getEnv("BLOCKTIME", "1")) // Block time in seconds for geth simulated dev network
- numberOfEvents, _ = strconv.Atoi(getEnv("NUMBEROFEVENTS", "1")) // Number of events to emit per trigger
- specType = getEnv("SPECTYPE", "minimum") // minimum, recommended, local specs for the test
- logLevel = getEnv("LOGLEVEL", "info") // log level for the chainlink nodes
- pyroscope, _ = strconv.ParseBool(getEnv("PYROSCOPE", "false")) // enable pyroscope for the chainlink nodes
+ numberofNodes, _ = strconv.Atoi(getEnv("NUMBEROFNODES", "6")) // Number of nodes in the DON
+ duration, _ = strconv.Atoi(getEnv("DURATION", "900")) // Test duration in seconds
+ blockTime, _ = strconv.Atoi(getEnv("BLOCKTIME", "1")) // Block time in seconds for geth simulated dev network
+ nodeFunding, _ = strconv.ParseFloat(getEnv("NODEFUNDING", "100"), 64) // Amount of native to fund each node with
+
+ specType = getEnv("SPECTYPE", "minimum") // minimum, recommended, local specs for the test
+ logLevel = getEnv("LOGLEVEL", "info") // log level for the chainlink nodes
+ pyroscope, _ = strconv.ParseBool(getEnv("PYROSCOPE", "false")) // enable pyroscope for the chainlink nodes
+ prometheus, _ = strconv.ParseBool(getEnv("PROMETHEUS", "false")) // enable prometheus for the chainlink nodes
+ configOverride = os.Getenv("CONFIG_OVERRIDE") // config overrides for the load config
)
+type Load struct {
+ NumberOfEvents int `toml:",omitempty"`
+ NumberOfSpamMatchingEvents int `toml:",omitempty"`
+ NumberOfSpamNonMatchingEvents int `toml:",omitempty"`
+ CheckBurnAmount *big.Int `toml:",omitempty"`
+ PerformBurnAmount *big.Int `toml:",omitempty"`
+ UpkeepGasLimit uint32 `toml:",omitempty"`
+ NumberOfUpkeeps int `toml:",omitempty"`
+ SharedTrigger bool `toml:",omitempty"`
+}
+
+type LoadConfig struct {
+ Load []Load `toml:",omitempty"`
+}
+
+var defaultLoadConfig = LoadConfig{
+ Load: []Load{
+ {
+ NumberOfEvents: 1,
+ NumberOfSpamMatchingEvents: 1,
+ NumberOfSpamNonMatchingEvents: 0,
+ CheckBurnAmount: big.NewInt(0),
+ PerformBurnAmount: big.NewInt(0),
+ UpkeepGasLimit: 1_000_000,
+ NumberOfUpkeeps: 5,
+ SharedTrigger: false,
+ },
+ {
+ NumberOfEvents: 1,
+ NumberOfSpamMatchingEvents: 0,
+ NumberOfSpamNonMatchingEvents: 1,
+ CheckBurnAmount: big.NewInt(0),
+ PerformBurnAmount: big.NewInt(0),
+ UpkeepGasLimit: 1_000_000,
+ NumberOfUpkeeps: 5,
+ SharedTrigger: true,
+ }},
+}
+
func TestLogTrigger(t *testing.T) {
ctx := tests.Context(t)
l := logging.GetTestLogger(t)
+ loadConfig := &LoadConfig{}
+ if configOverride != "" {
+ d, err := base64.StdEncoding.DecodeString(configOverride)
+ require.NoError(t, err, "Error decoding config override")
+ l.Info().Str("CONFIG_OVERRIDE", configOverride).Bytes("Decoded value", d).Msg("Decoding config override")
+ err = toml.Unmarshal(d, &loadConfig)
+ require.NoError(t, err, "Error unmarshalling config override")
+ } else {
+ loadConfig = &defaultLoadConfig
+ }
+
+ loadConfigBytes, err := toml.Marshal(loadConfig)
+ require.NoError(t, err, "Error marshalling load config")
+
l.Info().Msg("Starting automation v2.1 log trigger load test")
l.Info().Str("TEST_INPUTS", os.Getenv("TEST_INPUTS")).Int("Number of Nodes", numberofNodes).
- Int("Number of Upkeeps", numberOfUpkeeps).
Int("Duration", duration).
Int("Block Time", blockTime).
- Int("Number of Events", numberOfEvents).
Str("Spec Type", specType).
Str("Log Level", logLevel).
Str("Image", os.Getenv(config.EnvVarCLImage)).
Str("Tag", os.Getenv(config.EnvVarCLTag)).
+ Bytes("Load Config", loadConfigBytes).
Msg("Test Config")
- testConfig := fmt.Sprintf("Number of Nodes: %d\nNumber of Upkeeps: %d\nDuration: %d\nBlock Time: %d\n"+
- "Number of Events: %d\nSpec Type: %s\nLog Level: %s\nImage: %s\nTag: %s\n", numberofNodes, numberOfUpkeeps, duration,
- blockTime, numberOfEvents, specType, logLevel, os.Getenv(config.EnvVarCLImage), os.Getenv(config.EnvVarCLTag))
+ testConfig := fmt.Sprintf("Number of Nodes: %d\nDuration: %d\nBlock Time: %d\n"+
+ "Spec Type: %s\nLog Level: %s\nImage: %s\nTag: %s\n\nLoad Config: \n%s", numberofNodes, duration,
+ blockTime, specType, logLevel, os.Getenv(config.EnvVarCLImage), os.Getenv(config.EnvVarCLTag), string(loadConfigBytes))
+ l.Info().Str("testConfig", testConfig).Msg("Test Config")
testNetwork := networks.MustGetSelectedNetworksFromEnv()[0]
testType := "load"
loadDuration := time.Duration(duration) * time.Second
automationDefaultLinkFunds := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(10000))) //10000 LINK
- automationDefaultUpkeepGasLimit := uint32(1_000_000)
registrySettings := &contracts.KeeperRegistrySettings{
PaymentPremiumPPB: uint32(0),
@@ -198,6 +251,10 @@ func TestLogTrigger(t *testing.T) {
key = "GRAFANA_DASHBOARD_URL"
err = os.Setenv(fmt.Sprintf("TEST_%s", key), getEnv(key, ""))
require.NoError(t, err, "failed to set the environment variable GRAFANA_DASHBOARD_URL for remote runner")
+
+ key = "CONFIG_OVERRIDE"
+ err = os.Setenv(fmt.Sprintf("TEST_%s", key), os.Getenv(key))
+ require.NoError(t, err, "failed to set the environment variable CONFIG_OVERRIDE for remote runner")
}
testEnvironment.
@@ -206,24 +263,15 @@ func TestLogTrigger(t *testing.T) {
Simulated: testNetwork.Simulated,
WsURLs: testNetwork.URLs,
Values: map[string]interface{}{
- "resources": map[string]interface{}{
- "requests": map[string]interface{}{
- "cpu": "4000m",
- "memory": "4Gi",
- },
- "limits": map[string]interface{}{
- "cpu": "8000m",
- "memory": "8Gi",
- },
- },
+ "resources": gethNodeSpec,
"geth": map[string]interface{}{
"blocktime": blockTime,
- "capacity": "10Gi",
+ "capacity": "20Gi",
},
},
}))
- err := testEnvironment.Run()
+ err = testEnvironment.Run()
require.NoError(t, err, "Error launching test environment")
if testEnvironment.WillUseRemoteRunner() {
@@ -264,9 +312,10 @@ func TestLogTrigger(t *testing.T) {
}
nodeTOML = networks.AddNetworksConfig(nodeTOML, testNetwork)
testEnvironment.AddHelm(chainlink.New(i, map[string]any{
- "toml": nodeTOML,
- "chainlink": nodeSpec,
- "db": dbSpec,
+ "toml": nodeTOML,
+ "chainlink": nodeSpec,
+ "db": dbSpec,
+ "prometheus": prometheus,
}))
}
@@ -318,11 +367,12 @@ func TestLogTrigger(t *testing.T) {
a.SetupAutomationDeployment(t)
- err = actions.FundChainlinkNodesAddress(chainlinkNodes[1:], chainClient, big.NewFloat(100), 0)
+ err = actions.FundChainlinkNodesAddress(chainlinkNodes[1:], chainClient, big.NewFloat(nodeFunding), 0)
require.NoError(t, err, "Error funding chainlink nodes")
consumerContracts := make([]contracts.KeeperConsumer, 0)
triggerContracts := make([]contracts.LogEmitter, 0)
+ triggerAddresses := make([]common.Address, 0)
utilsABI, err := automation_utils_2_1.AutomationUtilsMetaData.GetAbi()
require.NoError(t, err, "Error getting automation utils abi")
@@ -336,61 +386,91 @@ func TestLogTrigger(t *testing.T) {
}
upkeepConfigs := make([]automationv2.UpkeepConfig, 0)
+ loadConfigs := make([]Load, 0)
+ cEVMClient, err := blockchain.ConcurrentEVMClient(testNetwork, testEnvironment, chainClient, l)
+ require.NoError(t, err, "Error building concurrent chain client")
+
+ cContractDeployer, err := contracts.NewContractDeployer(cEVMClient, l)
+ require.NoError(t, err, "Error building concurrent contract deployer")
+ for _, u := range loadConfig.Load {
+ for i := 0; i < u.NumberOfUpkeeps; i++ {
+ consumerContract, err := contractDeployer.DeployAutomationSimpleLogTriggerConsumer()
+ require.NoError(t, err, "Error deploying automation consumer contract")
+ consumerContracts = append(consumerContracts, consumerContract)
+ l.Debug().
+ Str("Contract Address", consumerContract.Address()).
+ Int("Number", i+1).
+ Int("Out Of", u.NumberOfUpkeeps).
+ Msg("Deployed Automation Log Trigger Consumer Contract")
+ loadCfg := Load{
+ NumberOfEvents: u.NumberOfEvents,
+ NumberOfSpamMatchingEvents: u.NumberOfSpamMatchingEvents,
+ NumberOfSpamNonMatchingEvents: u.NumberOfSpamNonMatchingEvents,
+ CheckBurnAmount: u.CheckBurnAmount,
+ PerformBurnAmount: u.PerformBurnAmount,
+ UpkeepGasLimit: u.UpkeepGasLimit,
+ SharedTrigger: u.SharedTrigger,
+ }
+ loadConfigs = append(loadConfigs, loadCfg)
- for i := 0; i < numberOfUpkeeps; i++ {
- consumerContract, err := contractDeployer.DeployAutomationSimpleLogTriggerConsumer()
- require.NoError(t, err, "Error deploying automation consumer contract")
- consumerContracts = append(consumerContracts, consumerContract)
- l.Debug().
- Str("Contract Address", consumerContract.Address()).
- Int("Number", i+1).
- Int("Out Of", numberOfUpkeeps).
- Msg("Deployed Automation Log Trigger Consumer Contract")
-
- cEVMClient, err := blockchain.ConcurrentEVMClient(testNetwork, testEnvironment, chainClient, l)
- require.NoError(t, err, "Error building concurrent chain client")
-
- cContractDeployer, err := contracts.NewContractDeployer(cEVMClient, l)
- require.NoError(t, err, "Error building concurrent contract deployer")
-
- triggerContract, err := cContractDeployer.DeployLogEmitterContract()
- require.NoError(t, err, "Error deploying log emitter contract")
- triggerContracts = append(triggerContracts, triggerContract)
- l.Debug().
- Str("Contract Address", triggerContract.Address().Hex()).
- Int("Number", i+1).
- Int("Out Of", numberOfUpkeeps).
- Msg("Deployed Automation Log Trigger Emitter Contract")
+ if u.SharedTrigger && i > 0 {
+ triggerAddresses = append(triggerAddresses, triggerAddresses[len(triggerAddresses)-1])
+ continue
+ }
+ triggerContract, err := cContractDeployer.DeployLogEmitterContract()
+ require.NoError(t, err, "Error deploying log emitter contract")
+ triggerContracts = append(triggerContracts, triggerContract)
+ triggerAddresses = append(triggerAddresses, triggerContract.Address())
+ l.Debug().
+ Str("Contract Address", triggerContract.Address().Hex()).
+ Int("Number", i+1).
+ Int("Out Of", u.NumberOfUpkeeps).
+ Msg("Deployed Automation Log Trigger Emitter Contract")
+ }
+ err = chainClient.WaitForEvents()
+ require.NoError(t, err, "Failed waiting for contracts to deploy")
}
- err = chainClient.WaitForEvents()
- require.NoError(t, err, "Failed waiting for contracts to deploy")
-
for i, consumerContract := range consumerContracts {
logTriggerConfigStruct := automation_utils_2_1.LogTriggerConfig{
- ContractAddress: triggerContracts[i].Address(),
- FilterSelector: 0,
- Topic0: emitterABI.Events["Log1"].ID,
- Topic1: bytes0,
- Topic2: bytes0,
- Topic3: bytes0,
+ ContractAddress: triggerAddresses[i],
+ FilterSelector: 1,
+ Topic0: emitterABI.Events["Log4"].ID,
+ Topic1: [32]byte{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ },
+ Topic2: bytes0,
+ Topic3: bytes0,
}
encodedLogTriggerConfig, err := utilsABI.Methods["_logTriggerConfig"].Inputs.Pack(&logTriggerConfigStruct)
require.NoError(t, err, "Error encoding log trigger config")
l.Debug().Bytes("Encoded Log Trigger Config", encodedLogTriggerConfig).Msg("Encoded Log Trigger Config")
+ checkDataStruct := simple_log_upkeep_counter_wrapper.CheckData{
+ CheckBurnAmount: loadConfigs[i].CheckBurnAmount,
+ PerformBurnAmount: loadConfigs[i].PerformBurnAmount,
+ EventSig: [32]byte{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ },
+ }
+
+ encodedCheckDataStruct, err := consumerABI.Methods["_checkDataConfig"].Inputs.Pack(&checkDataStruct)
+ require.NoError(t, err, "Error encoding check data struct")
+ l.Debug().Bytes("Encoded Check Data Struct", encodedCheckDataStruct).Msg("Encoded Check Data Struct")
+
upkeepConfig := automationv2.UpkeepConfig{
UpkeepName: fmt.Sprintf("LogTriggerUpkeep-%d", i),
EncryptedEmail: []byte("test@mail.com"),
UpkeepContract: common.HexToAddress(consumerContract.Address()),
- GasLimit: automationDefaultUpkeepGasLimit,
+ GasLimit: loadConfigs[i].UpkeepGasLimit,
AdminAddress: common.HexToAddress(chainClient.GetDefaultWallet().Address()),
TriggerType: uint8(1),
- CheckData: []byte("0"),
+ CheckData: encodedCheckDataStruct,
TriggerConfig: encodedLogTriggerConfig,
OffchainConfig: []byte("0"),
FundingAmount: automationDefaultLinkFunds,
}
+ l.Debug().Interface("Upkeep Config", upkeepConfig).Msg("Upkeep Config")
upkeepConfigs = append(upkeepConfigs, upkeepConfig)
}
@@ -425,9 +505,10 @@ func TestLogTrigger(t *testing.T) {
),
Gun: NewLogTriggerUser(
triggerContract,
- consumerContracts[i],
l,
- numberOfEvents,
+ loadConfigs[i].NumberOfEvents,
+ loadConfigs[i].NumberOfSpamMatchingEvents,
+ loadConfigs[i].NumberOfSpamNonMatchingEvents,
),
CallResultBufLen: 1000000,
})
@@ -436,9 +517,9 @@ func TestLogTrigger(t *testing.T) {
l.Info().Msg("Starting load generators")
startTime := time.Now()
- err = sendSlackNotification("Started", l, testEnvironment.Cfg.Namespace, strconv.Itoa(numberofNodes),
+ ts, err := sendSlackNotification("Started", l, testEnvironment.Cfg.Namespace, strconv.Itoa(numberofNodes),
strconv.FormatInt(startTime.UnixMilli(), 10), "now",
- []slack.Block{extraBlockWithText("\bTest Config\b\n```" + testConfig + "```")})
+ []slack.Block{extraBlockWithText("\bTest Config\b\n```" + testConfig + "```")}, slack.MsgOptionBlocks())
if err != nil {
l.Error().Err(err).Msg("Error sending slack notification")
}
@@ -460,10 +541,9 @@ func TestLogTrigger(t *testing.T) {
var numberOfEventsEmitted int
var batchSize uint64 = 500
- for _, gen := range p.Generators {
- numberOfEventsEmitted += len(gen.GetData().OKData.Data)
+ for i, gen := range p.Generators {
+ numberOfEventsEmitted = numberOfEventsEmitted + (len(gen.GetData().OKData.Data) * loadConfigs[i].NumberOfEvents)
}
- numberOfEventsEmitted = numberOfEventsEmitted * numberOfEvents
l.Info().Int("Number of Events Emitted", numberOfEventsEmitted).Msg("Number of Events Emitted")
if endBlock-startBlock < batchSize {
@@ -500,7 +580,7 @@ func TestLogTrigger(t *testing.T) {
timeout = time.Duration(math.Min(float64(timeout)*2, float64(2*time.Minute)))
continue
}
- l.Info().
+ l.Debug().
Interface("FilterQuery", filterQuery).
Str("Contract Address", consumerContract.Address()).
Str("Timeout", timeout.String()).
@@ -557,9 +637,9 @@ func TestLogTrigger(t *testing.T) {
avg, median, ninetyPct, ninetyNinePct, maximum, len(allUpkeepDelays), numberOfEventsEmitted,
eventsMissed, percentMissed, testDuration.String())
- err = sendSlackNotification("Finished", l, testEnvironment.Cfg.Namespace, strconv.Itoa(numberofNodes),
- strconv.FormatInt(startTime.UnixMilli(), 10), strconv.FormatInt(endTime.UnixMilli(), 10),
- []slack.Block{extraBlockWithText("\bTest Report\b\n```" + testReport + "```")})
+ _, err = sendSlackNotification("Finished", l, testEnvironment.Cfg.Namespace, strconv.Itoa(numberofNodes),
+ strconv.FormatInt(startTime.UnixMilli(), 10), strconv.FormatInt(time.Now().UnixMilli(), 10),
+ []slack.Block{extraBlockWithText("\bTest Report\b\n```" + testReport + "```")}, slack.MsgOptionTS(ts))
if err != nil {
l.Error().Err(err).Msg("Error sending slack notification")
}
diff --git a/integration-tests/load/automationv2_1/gun.go b/integration-tests/load/automationv2_1/gun.go
index 2bbb654e00b..938ce8708e6 100644
--- a/integration-tests/load/automationv2_1/gun.go
+++ b/integration-tests/load/automationv2_1/gun.go
@@ -8,35 +8,52 @@ import (
)
type LogTriggerGun struct {
- triggerContract contracts.LogEmitter
- upkeepContract contracts.KeeperConsumer
- logger zerolog.Logger
- numberOfEvents int
+ triggerContract contracts.LogEmitter
+ logger zerolog.Logger
+ numberOfEvents int
+ numberOfSpamMatchingEvents int
+ numberOfSpamNonMatchingEvents int
}
func NewLogTriggerUser(
triggerContract contracts.LogEmitter,
- upkeepContract contracts.KeeperConsumer,
logger zerolog.Logger,
numberOfEvents int,
+ numberOfSpamMatchingEvents int,
+ numberOfSpamNonMatchingEvents int,
) *LogTriggerGun {
+
return &LogTriggerGun{
- triggerContract: triggerContract,
- upkeepContract: upkeepContract,
- logger: logger,
- numberOfEvents: numberOfEvents,
+ triggerContract: triggerContract,
+ logger: logger,
+ numberOfEvents: numberOfEvents,
+ numberOfSpamMatchingEvents: numberOfSpamMatchingEvents,
+ numberOfSpamNonMatchingEvents: numberOfSpamNonMatchingEvents,
}
}
func (m *LogTriggerGun) Call(_ *wasp.Generator) *wasp.Response {
m.logger.Debug().Str("Trigger address", m.triggerContract.Address().String()).Msg("Triggering upkeep")
- payload := make([]int, 0)
- for i := 0; i < m.numberOfEvents; i++ {
- payload = append(payload, 1)
+
+ if m.numberOfEvents > 0 {
+ _, err := m.triggerContract.EmitLogIntMultiIndexed(1, 1, m.numberOfEvents)
+ if err != nil {
+ return &wasp.Response{Error: err.Error(), Failed: true}
+ }
}
- _, err := m.triggerContract.EmitLogInts(payload)
- if err != nil {
- return &wasp.Response{Error: err.Error(), Failed: true}
+
+ if m.numberOfSpamMatchingEvents > 0 {
+ _, err := m.triggerContract.EmitLogIntMultiIndexed(1, 2, m.numberOfSpamMatchingEvents)
+ if err != nil {
+ return &wasp.Response{Error: err.Error(), Failed: true}
+ }
+ }
+
+ if m.numberOfSpamNonMatchingEvents > 0 {
+ _, err := m.triggerContract.EmitLogIntMultiIndexed(2, 2, m.numberOfSpamNonMatchingEvents)
+ if err != nil {
+ return &wasp.Response{Error: err.Error(), Failed: true}
+ }
}
return &wasp.Response{}
diff --git a/integration-tests/load/automationv2_1/helpers.go b/integration-tests/load/automationv2_1/helpers.go
index 3c08199a9cf..68ac909af90 100644
--- a/integration-tests/load/automationv2_1/helpers.go
+++ b/integration-tests/load/automationv2_1/helpers.go
@@ -31,7 +31,7 @@ func extraBlockWithText(text string) slack.Block {
}
func sendSlackNotification(header string, l zerolog.Logger, namespace string, numberOfNodes,
- startingTime string, endingTime string, extraBlocks []slack.Block) error {
+ startingTime string, endingTime string, extraBlocks []slack.Block, msgOption slack.MsgOption) (string, error) {
slackClient := slack.New(reportModel.SlackAPIKey)
headerText := ":chainlink-keepers: Automation Load Test " + header + " :white_check_mark:"
@@ -65,7 +65,7 @@ func sendSlackNotification(header string, l zerolog.Logger, namespace string, nu
notificationBlocks = append(notificationBlocks, extraBlocks...)
}
- ts, err := reportModel.SendSlackMessage(slackClient, slack.MsgOptionBlocks(notificationBlocks...))
+ ts, err := reportModel.SendSlackMessage(slackClient, slack.MsgOptionBlocks(notificationBlocks...), msgOption)
l.Info().Str("ts", ts).Msg("Sent Slack Message")
- return err
+ return ts, err
}
diff --git a/integration-tests/smoke/vrfv2_test.go b/integration-tests/smoke/vrfv2_test.go
index a8edb2c51d9..4167342c41f 100644
--- a/integration-tests/smoke/vrfv2_test.go
+++ b/integration-tests/smoke/vrfv2_test.go
@@ -4,19 +4,21 @@ import (
"context"
"math/big"
"testing"
+ "time"
+ "github.com/ethereum/go-ethereum/common"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/kelseyhightower/envconfig"
"github.com/stretchr/testify/require"
"github.com/smartcontractkit/chainlink-testing-framework/blockchain"
- "github.com/smartcontractkit/chainlink/integration-tests/actions/vrfv2_actions"
- "github.com/smartcontractkit/chainlink/integration-tests/actions/vrfv2_actions/vrfv2_config"
-
"github.com/smartcontractkit/chainlink-testing-framework/logging"
+ "github.com/smartcontractkit/chainlink-testing-framework/utils/testcontext"
"github.com/smartcontractkit/chainlink/integration-tests/actions"
+ "github.com/smartcontractkit/chainlink/integration-tests/actions/vrfv2_actions"
+ "github.com/smartcontractkit/chainlink/integration-tests/actions/vrfv2_actions/vrfv2_config"
"github.com/smartcontractkit/chainlink/integration-tests/docker/test_env"
)
@@ -113,19 +115,259 @@ func TestVRFv2Basic(t *testing.T) {
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})
+
+ t.Run("Oracle Withdraw", func(t *testing.T) {
+ testConfig := vrfv2Config
+ subIDsForOracleWithDraw, err := vrfv2_actions.CreateFundSubsAndAddConsumers(
+ env,
+ testConfig,
+ linkToken,
+ vrfv2Contracts.Coordinator,
+ vrfv2Contracts.LoadTestConsumers,
+ 1,
+ )
+ require.NoError(t, err)
+
+ subIDForOracleWithdraw := subIDsForOracleWithDraw[0]
+
+ fulfilledEventLink, err := vrfv2_actions.RequestRandomnessAndWaitForFulfillment(
+ vrfv2Contracts.LoadTestConsumers[0],
+ vrfv2Contracts.Coordinator,
+ vrfv2Data,
+ subIDForOracleWithdraw,
+ testConfig.RandomnessRequestCountPerRequest,
+ testConfig,
+ testConfig.RandomWordsFulfilledEventTimeout,
+ l,
+ )
+ require.NoError(t, err)
+
+ amountToWithdrawLink := fulfilledEventLink.Payment
+
+ defaultWalletBalanceLinkBeforeOracleWithdraw, err := linkToken.BalanceOf(testcontext.Get(t), defaultWalletAddress)
+ require.NoError(t, err)
+
+ l.Info().
+ Str("Returning to", defaultWalletAddress).
+ Str("Amount", amountToWithdrawLink.String()).
+ Msg("Invoking Oracle Withdraw for LINK")
+
+ err = vrfv2Contracts.Coordinator.OracleWithdraw(common.HexToAddress(defaultWalletAddress), amountToWithdrawLink)
+ require.NoError(t, err, "Error withdrawing LINK from coordinator to default wallet")
+
+ err = env.EVMClient.WaitForEvents()
+ require.NoError(t, err, vrfv2_actions.ErrWaitTXsComplete)
+
+ defaultWalletBalanceLinkAfterOracleWithdraw, err := linkToken.BalanceOf(testcontext.Get(t), defaultWalletAddress)
+ require.NoError(t, err)
+
+ require.Equal(
+ t,
+ 1,
+ defaultWalletBalanceLinkAfterOracleWithdraw.Cmp(defaultWalletBalanceLinkBeforeOracleWithdraw),
+ "LINK funds were not returned after oracle withdraw",
+ )
+ })
+ t.Run("Canceling Sub And Returning Funds", func(t *testing.T) {
+ testConfig := vrfv2Config
+ subIDsForCancelling, err := vrfv2_actions.CreateFundSubsAndAddConsumers(
+ env,
+ testConfig,
+ linkToken,
+ vrfv2Contracts.Coordinator,
+ vrfv2Contracts.LoadTestConsumers,
+ 1,
+ )
+ require.NoError(t, err)
+ subIDForCancelling := subIDsForCancelling[0]
+
+ testWalletAddress, err := actions.GenerateWallet()
+ require.NoError(t, err)
+
+ testWalletBalanceLinkBeforeSubCancelling, err := linkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
+ require.NoError(t, err)
+
+ subscriptionForCancelling, err := vrfv2Contracts.Coordinator.GetSubscription(testcontext.Get(t), subIDForCancelling)
+ require.NoError(t, err, "error getting subscription information")
+
+ subBalanceLink := subscriptionForCancelling.Balance
+
+ l.Info().
+ Str("Subscription Amount Link", subBalanceLink.String()).
+ Uint64("Returning funds from SubID", subIDForCancelling).
+ Str("Returning funds to", testWalletAddress.String()).
+ Msg("Canceling subscription and returning funds to subscription owner")
+
+ tx, err := vrfv2Contracts.Coordinator.CancelSubscription(subIDForCancelling, testWalletAddress)
+ require.NoError(t, err, "Error canceling subscription")
+
+ subscriptionCanceledEvent, err := vrfv2Contracts.Coordinator.WaitForSubscriptionCanceledEvent([]uint64{subIDForCancelling}, time.Second*30)
+ require.NoError(t, err, "error waiting for subscription canceled event")
+
+ cancellationTxReceipt, err := env.EVMClient.GetTxReceipt(tx.Hash())
+ require.NoError(t, err, "error getting tx cancellation Tx Receipt")
+
+ txGasUsed := new(big.Int).SetUint64(cancellationTxReceipt.GasUsed)
+ cancellationTxFeeWei := new(big.Int).Mul(txGasUsed, cancellationTxReceipt.EffectiveGasPrice)
+
+ l.Info().
+ Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
+ Str("Effective Gas Price", cancellationTxReceipt.EffectiveGasPrice.String()).
+ Uint64("Gas Used", cancellationTxReceipt.GasUsed).
+ Msg("Cancellation TX Receipt")
+
+ l.Info().
+ Str("Returned Subscription Amount Link", subscriptionCanceledEvent.Amount.String()).
+ Uint64("SubID", subscriptionCanceledEvent.SubId).
+ Str("Returned to", subscriptionCanceledEvent.To.String()).
+ Msg("Subscription Canceled Event")
+
+ require.Equal(t, subBalanceLink, subscriptionCanceledEvent.Amount, "SubscriptionCanceled event LINK amount is not equal to sub amount while canceling subscription")
+
+ testWalletBalanceLinkAfterSubCancelling, err := linkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
+ require.NoError(t, err)
+
+ //Verify that sub was deleted from Coordinator
+ _, err = vrfv2Contracts.Coordinator.GetSubscription(testcontext.Get(t), subIDForCancelling)
+ require.Error(t, err, "error not occurred when trying to get deleted subscription from old Coordinator after sub migration")
+
+ subFundsReturnedLinkActual := new(big.Int).Sub(testWalletBalanceLinkAfterSubCancelling, testWalletBalanceLinkBeforeSubCancelling)
+
+ l.Info().
+ Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
+ Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
+ Str("Sub Balance - Link", subBalanceLink.String()).
+ Msg("Sub funds returned")
+
+ require.Equal(t, 0, subBalanceLink.Cmp(subFundsReturnedLinkActual), "Returned LINK funds are not equal to sub balance that was cancelled")
+ })
+
+ t.Run("Owner Canceling Sub And Returning Funds While Having Pending Requests", func(t *testing.T) {
+ testConfig := vrfv2Config
+
+ // Underfund subscription to force fulfillments to fail
+ testConfig.SubscriptionFundingAmountLink = float64(0.000000000000000001) // 1 Juel
+
+ subIDsForCancelling, err := vrfv2_actions.CreateFundSubsAndAddConsumers(
+ env,
+ testConfig,
+ linkToken,
+ vrfv2Contracts.Coordinator,
+ vrfv2Contracts.LoadTestConsumers,
+ 1,
+ )
+ require.NoError(t, err)
+
+ subIDForCancelling := subIDsForCancelling[0]
+
+ subscriptionForCancelling, err := vrfv2Contracts.Coordinator.GetSubscription(testcontext.Get(t), subIDForCancelling)
+ require.NoError(t, err, "Error getting subscription information")
+
+ vrfv2_actions.LogSubDetails(l, subscriptionForCancelling, subIDForCancelling, vrfv2Contracts.Coordinator)
+
+ // No GetActiveSubscriptionIds function available - skipping check
+
+ pendingRequestsExist, err := vrfv2Contracts.Coordinator.PendingRequestsExist(testcontext.Get(t), subIDForCancelling)
+ require.NoError(t, err)
+ require.False(t, pendingRequestsExist, "Pending requests should not exist")
+
+ // Request randomness - should fail due to underfunded subscription
+ randomWordsFulfilledEventTimeout := 5 * time.Second
+ _, err = vrfv2_actions.RequestRandomnessAndWaitForFulfillment(
+ vrfv2Contracts.LoadTestConsumers[0],
+ vrfv2Contracts.Coordinator,
+ vrfv2Data,
+ subIDForCancelling,
+ testConfig.RandomnessRequestCountPerRequest,
+ testConfig,
+ randomWordsFulfilledEventTimeout,
+ l,
+ )
+ require.Error(t, err, "Error should occur while waiting for fulfilment due to low sub balance")
+
+ pendingRequestsExist, err = vrfv2Contracts.Coordinator.PendingRequestsExist(testcontext.Get(t), subIDForCancelling)
+ require.NoError(t, err)
+ require.True(t, pendingRequestsExist, "Pending requests should exist after unfilfulled requests due to low sub balance")
+
+ walletBalanceLinkBeforeSubCancelling, err := linkToken.BalanceOf(testcontext.Get(t), defaultWalletAddress)
+ require.NoError(t, err)
+
+ subscriptionForCancelling, err = vrfv2Contracts.Coordinator.GetSubscription(testcontext.Get(t), subIDForCancelling)
+ require.NoError(t, err, "Error getting subscription information")
+ subBalanceLink := subscriptionForCancelling.Balance
+
+ l.Info().
+ Str("Subscription Amount Link", subBalanceLink.String()).
+ Uint64("Returning funds from SubID", subIDForCancelling).
+ Str("Returning funds to", defaultWalletAddress).
+ Msg("Canceling subscription and returning funds to subscription owner")
+
+ // Call OwnerCancelSubscription
+ tx, err := vrfv2Contracts.Coordinator.OwnerCancelSubscription(subIDForCancelling)
+ require.NoError(t, err, "Error canceling subscription")
+
+ subscriptionCanceledEvent, err := vrfv2Contracts.Coordinator.WaitForSubscriptionCanceledEvent([]uint64{subIDForCancelling}, time.Second*30)
+ require.NoError(t, err, "error waiting for subscription canceled event")
+
+ cancellationTxReceipt, err := env.EVMClient.GetTxReceipt(tx.Hash())
+ require.NoError(t, err, "error getting tx cancellation Tx Receipt")
+
+ txGasUsed := new(big.Int).SetUint64(cancellationTxReceipt.GasUsed)
+ cancellationTxFeeWei := new(big.Int).Mul(txGasUsed, cancellationTxReceipt.EffectiveGasPrice)
+
+ l.Info().
+ Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
+ Str("Effective Gas Price", cancellationTxReceipt.EffectiveGasPrice.String()).
+ Uint64("Gas Used", cancellationTxReceipt.GasUsed).
+ Msg("Cancellation TX Receipt")
+
+ l.Info().
+ Str("Returned Subscription Amount Link", subscriptionCanceledEvent.Amount.String()).
+ Uint64("SubID", subscriptionCanceledEvent.SubId).
+ Str("Returned to", subscriptionCanceledEvent.To.String()).
+ Msg("Subscription Canceled Event")
+
+ require.Equal(t, subBalanceLink, subscriptionCanceledEvent.Amount, "SubscriptionCanceled event LINK amount is not equal to sub amount while canceling subscription")
+
+ walletBalanceLinkAfterSubCancelling, err := linkToken.BalanceOf(testcontext.Get(t), defaultWalletAddress)
+ require.NoError(t, err)
+
+ // Verify that subscription was deleted from Coordinator contract
+ _, err = vrfv2Contracts.Coordinator.GetSubscription(testcontext.Get(t), subIDForCancelling)
+ l.Info().
+ Str("Expected error message", err.Error())
+ require.Error(t, err, "Error did not occur when fetching deleted subscription from the Coordinator after owner cancelation")
+
+ subFundsReturnedLinkActual := new(big.Int).Sub(walletBalanceLinkAfterSubCancelling, walletBalanceLinkBeforeSubCancelling)
+ l.Info().
+ Str("Wallet Balance Before Owner Cancelation", walletBalanceLinkBeforeSubCancelling.String()).
+ Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
+ Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
+ Str("Sub Balance - Link", subBalanceLink.String()).
+ Str("Wallet Balance After Owner Cancelation", walletBalanceLinkAfterSubCancelling.String()).
+ Msg("Sub funds returned")
+
+ require.Equal(t, 0, subBalanceLink.Cmp(subFundsReturnedLinkActual), "Returned LINK funds are not equal to sub balance that was cancelled")
+
+ // Again, there is no GetActiveSubscriptionIds method on the v2 Coordinator contract, so we can't double check that the cancelled
+ // subID is no longer in the list of active subs
+ })
}
func TestVRFv2MultipleSendingKeys(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
+ network, err := actions.EthereumNetworkConfigFromEnvOrDefault(l)
+ require.NoError(t, err, "Error building ethereum network config")
+
var vrfv2Config vrfv2_config.VRFV2Config
- err := envconfig.Process("VRFV2", &vrfv2Config)
+ err = envconfig.Process("VRFV2", &vrfv2Config)
require.NoError(t, err)
env, err := test_env.NewCLTestEnvBuilder().
WithTestInstance(t).
- WithGeth().
+ WithPrivateEthereumNetwork(network).
WithCLNodes(1).
WithFunding(big.NewFloat(vrfv2Config.ChainlinkNodeFunding)).
WithStandardCleanup().
diff --git a/integration-tests/smoke/vrfv2plus_test.go b/integration-tests/smoke/vrfv2plus_test.go
index a850cb4fe15..f3f14ac7cee 100644
--- a/integration-tests/smoke/vrfv2plus_test.go
+++ b/integration-tests/smoke/vrfv2plus_test.go
@@ -611,13 +611,16 @@ func TestVRFv2PlusMultipleSendingKeys(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
+ network, err := actions.EthereumNetworkConfigFromEnvOrDefault(l)
+ require.NoError(t, err, "Error building ethereum network config")
+
var vrfv2PlusConfig vrfv2plus_config.VRFV2PlusConfig
- err := envconfig.Process("VRFV2PLUS", &vrfv2PlusConfig)
+ err = envconfig.Process("VRFV2PLUS", &vrfv2PlusConfig)
require.NoError(t, err)
env, err := test_env.NewCLTestEnvBuilder().
WithTestInstance(t).
- WithGeth().
+ WithPrivateEthereumNetwork(network).
WithCLNodes(1).
WithFunding(big.NewFloat(vrfv2PlusConfig.ChainlinkNodeFunding)).
WithStandardCleanup().
@@ -702,13 +705,17 @@ func TestVRFv2PlusMultipleSendingKeys(t *testing.T) {
func TestVRFv2PlusMigration(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
+
+ network, err := actions.EthereumNetworkConfigFromEnvOrDefault(l)
+ require.NoError(t, err, "Error building ethereum network config")
+
var vrfv2PlusConfig vrfv2plus_config.VRFV2PlusConfig
- err := envconfig.Process("VRFV2PLUS", &vrfv2PlusConfig)
+ err = envconfig.Process("VRFV2PLUS", &vrfv2PlusConfig)
require.NoError(t, err)
env, err := test_env.NewCLTestEnvBuilder().
WithTestInstance(t).
- WithGeth().
+ WithPrivateEthereumNetwork(network).
WithCLNodes(1).
WithFunding(big.NewFloat(vrfv2PlusConfig.ChainlinkNodeFunding)).
WithStandardCleanup().