diff --git a/.changeset/witty-humans-pull.md b/.changeset/witty-humans-pull.md new file mode 100644 index 00000000000..c13e6ede07c --- /dev/null +++ b/.changeset/witty-humans-pull.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +Adding configuration EVM Service for submit transaction and calcualte transaction fee and configuration for submit transaction confirmation time behavior diff --git a/.mockery.yaml b/.mockery.yaml index e399cd9a5fb..2724f11c3ba 100644 --- a/.mockery.yaml +++ b/.mockery.yaml @@ -50,6 +50,7 @@ packages: dir: common/txmgr/mocks interfaces: EvmTxStore: + ChainReceipt: github.com/smartcontractkit/chainlink-evm/pkg/chains/legacyevm: config: dir: common/chains/mocks diff --git a/ccip/config/evm/fallback.toml b/ccip/config/evm/fallback.toml index 7f856d47cee..c3069ac52e8 100644 --- a/ccip/config/evm/fallback.toml +++ b/ccip/config/evm/fallback.toml @@ -27,6 +27,7 @@ MaxQueued = 250 ReaperInterval = '1h' ReaperThreshold = '168h' ResendAfterThreshold = '1m' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false diff --git a/common/txmgr/mocks/chain_receipt.go b/common/txmgr/mocks/chain_receipt.go new file mode 100644 index 00000000000..e886a3ff704 --- /dev/null +++ b/common/txmgr/mocks/chain_receipt.go @@ -0,0 +1,546 @@ +// Code generated by mockery v2.53.0. DO NOT EDIT. + +package mocks + +import ( + big "math/big" + + common "github.com/ethereum/go-ethereum/common" + chains "github.com/smartcontractkit/chainlink-framework/chains" + + mock "github.com/stretchr/testify/mock" +) + +// ChainReceipt is an autogenerated mock type for the ChainReceipt type +type ChainReceipt[THASH chains.Hashable, BHASH chains.Hashable] struct { + mock.Mock +} + +type ChainReceipt_Expecter[THASH chains.Hashable, BHASH chains.Hashable] struct { + mock *mock.Mock +} + +func (_m *ChainReceipt[THASH, BHASH]) EXPECT() *ChainReceipt_Expecter[THASH, BHASH] { + return &ChainReceipt_Expecter[THASH, BHASH]{mock: &_m.Mock} +} + +// GetBlockHash provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) GetBlockHash() common.Hash { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetBlockHash") + } + + var r0 common.Hash + if rf, ok := ret.Get(0).(func() common.Hash); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(common.Hash) + } + } + + return r0 +} + +// ChainReceipt_GetBlockHash_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetBlockHash' +type ChainReceipt_GetBlockHash_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// GetBlockHash is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) GetBlockHash() *ChainReceipt_GetBlockHash_Call[THASH, BHASH] { + return &ChainReceipt_GetBlockHash_Call[THASH, BHASH]{Call: _e.mock.On("GetBlockHash")} +} + +func (_c *ChainReceipt_GetBlockHash_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_GetBlockHash_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_GetBlockHash_Call[THASH, BHASH]) Return(_a0 common.Hash) *ChainReceipt_GetBlockHash_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_GetBlockHash_Call[THASH, BHASH]) RunAndReturn(run func() common.Hash) *ChainReceipt_GetBlockHash_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// GetBlockNumber provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) GetBlockNumber() *big.Int { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetBlockNumber") + } + + var r0 *big.Int + if rf, ok := ret.Get(0).(func() *big.Int); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Int) + } + } + + return r0 +} + +// ChainReceipt_GetBlockNumber_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetBlockNumber' +type ChainReceipt_GetBlockNumber_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// GetBlockNumber is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) GetBlockNumber() *ChainReceipt_GetBlockNumber_Call[THASH, BHASH] { + return &ChainReceipt_GetBlockNumber_Call[THASH, BHASH]{Call: _e.mock.On("GetBlockNumber")} +} + +func (_c *ChainReceipt_GetBlockNumber_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_GetBlockNumber_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_GetBlockNumber_Call[THASH, BHASH]) Return(_a0 *big.Int) *ChainReceipt_GetBlockNumber_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_GetBlockNumber_Call[THASH, BHASH]) RunAndReturn(run func() *big.Int) *ChainReceipt_GetBlockNumber_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// GetEffectiveGasPrice provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) GetEffectiveGasPrice() *big.Int { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetEffectiveGasPrice") + } + + var r0 *big.Int + if rf, ok := ret.Get(0).(func() *big.Int); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Int) + } + } + + return r0 +} + +// ChainReceipt_GetEffectiveGasPrice_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetEffectiveGasPrice' +type ChainReceipt_GetEffectiveGasPrice_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// GetEffectiveGasPrice is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) GetEffectiveGasPrice() *ChainReceipt_GetEffectiveGasPrice_Call[THASH, BHASH] { + return &ChainReceipt_GetEffectiveGasPrice_Call[THASH, BHASH]{Call: _e.mock.On("GetEffectiveGasPrice")} +} + +func (_c *ChainReceipt_GetEffectiveGasPrice_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_GetEffectiveGasPrice_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_GetEffectiveGasPrice_Call[THASH, BHASH]) Return(_a0 *big.Int) *ChainReceipt_GetEffectiveGasPrice_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_GetEffectiveGasPrice_Call[THASH, BHASH]) RunAndReturn(run func() *big.Int) *ChainReceipt_GetEffectiveGasPrice_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// GetFeeUsed provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) GetFeeUsed() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetFeeUsed") + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// ChainReceipt_GetFeeUsed_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFeeUsed' +type ChainReceipt_GetFeeUsed_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// GetFeeUsed is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) GetFeeUsed() *ChainReceipt_GetFeeUsed_Call[THASH, BHASH] { + return &ChainReceipt_GetFeeUsed_Call[THASH, BHASH]{Call: _e.mock.On("GetFeeUsed")} +} + +func (_c *ChainReceipt_GetFeeUsed_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_GetFeeUsed_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_GetFeeUsed_Call[THASH, BHASH]) Return(_a0 uint64) *ChainReceipt_GetFeeUsed_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_GetFeeUsed_Call[THASH, BHASH]) RunAndReturn(run func() uint64) *ChainReceipt_GetFeeUsed_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// GetL1Fee provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) GetL1Fee() *big.Int { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetL1Fee") + } + + var r0 *big.Int + if rf, ok := ret.Get(0).(func() *big.Int); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Int) + } + } + + return r0 +} + +// ChainReceipt_GetL1Fee_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetL1Fee' +type ChainReceipt_GetL1Fee_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// GetL1Fee is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) GetL1Fee() *ChainReceipt_GetL1Fee_Call[THASH, BHASH] { + return &ChainReceipt_GetL1Fee_Call[THASH, BHASH]{Call: _e.mock.On("GetL1Fee")} +} + +func (_c *ChainReceipt_GetL1Fee_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_GetL1Fee_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_GetL1Fee_Call[THASH, BHASH]) Return(_a0 *big.Int) *ChainReceipt_GetL1Fee_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_GetL1Fee_Call[THASH, BHASH]) RunAndReturn(run func() *big.Int) *ChainReceipt_GetL1Fee_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// GetRevertReason provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) GetRevertReason() *string { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetRevertReason") + } + + var r0 *string + if rf, ok := ret.Get(0).(func() *string); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*string) + } + } + + return r0 +} + +// ChainReceipt_GetRevertReason_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetRevertReason' +type ChainReceipt_GetRevertReason_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// GetRevertReason is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) GetRevertReason() *ChainReceipt_GetRevertReason_Call[THASH, BHASH] { + return &ChainReceipt_GetRevertReason_Call[THASH, BHASH]{Call: _e.mock.On("GetRevertReason")} +} + +func (_c *ChainReceipt_GetRevertReason_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_GetRevertReason_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_GetRevertReason_Call[THASH, BHASH]) Return(_a0 *string) *ChainReceipt_GetRevertReason_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_GetRevertReason_Call[THASH, BHASH]) RunAndReturn(run func() *string) *ChainReceipt_GetRevertReason_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// GetStatus provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) GetStatus() uint64 { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetStatus") + } + + var r0 uint64 + if rf, ok := ret.Get(0).(func() uint64); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint64) + } + + return r0 +} + +// ChainReceipt_GetStatus_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetStatus' +type ChainReceipt_GetStatus_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// GetStatus is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) GetStatus() *ChainReceipt_GetStatus_Call[THASH, BHASH] { + return &ChainReceipt_GetStatus_Call[THASH, BHASH]{Call: _e.mock.On("GetStatus")} +} + +func (_c *ChainReceipt_GetStatus_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_GetStatus_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_GetStatus_Call[THASH, BHASH]) Return(_a0 uint64) *ChainReceipt_GetStatus_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_GetStatus_Call[THASH, BHASH]) RunAndReturn(run func() uint64) *ChainReceipt_GetStatus_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// GetTransactionIndex provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) GetTransactionIndex() uint { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetTransactionIndex") + } + + var r0 uint + if rf, ok := ret.Get(0).(func() uint); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(uint) + } + + return r0 +} + +// ChainReceipt_GetTransactionIndex_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetTransactionIndex' +type ChainReceipt_GetTransactionIndex_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// GetTransactionIndex is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) GetTransactionIndex() *ChainReceipt_GetTransactionIndex_Call[THASH, BHASH] { + return &ChainReceipt_GetTransactionIndex_Call[THASH, BHASH]{Call: _e.mock.On("GetTransactionIndex")} +} + +func (_c *ChainReceipt_GetTransactionIndex_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_GetTransactionIndex_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_GetTransactionIndex_Call[THASH, BHASH]) Return(_a0 uint) *ChainReceipt_GetTransactionIndex_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_GetTransactionIndex_Call[THASH, BHASH]) RunAndReturn(run func() uint) *ChainReceipt_GetTransactionIndex_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// GetTxHash provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) GetTxHash() common.Hash { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for GetTxHash") + } + + var r0 common.Hash + if rf, ok := ret.Get(0).(func() common.Hash); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(common.Hash) + } + } + + return r0 +} + +// ChainReceipt_GetTxHash_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetTxHash' +type ChainReceipt_GetTxHash_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// GetTxHash is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) GetTxHash() *ChainReceipt_GetTxHash_Call[THASH, BHASH] { + return &ChainReceipt_GetTxHash_Call[THASH, BHASH]{Call: _e.mock.On("GetTxHash")} +} + +func (_c *ChainReceipt_GetTxHash_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_GetTxHash_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_GetTxHash_Call[THASH, BHASH]) Return(_a0 common.Hash) *ChainReceipt_GetTxHash_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_GetTxHash_Call[THASH, BHASH]) RunAndReturn(run func() common.Hash) *ChainReceipt_GetTxHash_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// IsUnmined provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) IsUnmined() bool { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for IsUnmined") + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// ChainReceipt_IsUnmined_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'IsUnmined' +type ChainReceipt_IsUnmined_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// IsUnmined is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) IsUnmined() *ChainReceipt_IsUnmined_Call[THASH, BHASH] { + return &ChainReceipt_IsUnmined_Call[THASH, BHASH]{Call: _e.mock.On("IsUnmined")} +} + +func (_c *ChainReceipt_IsUnmined_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_IsUnmined_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_IsUnmined_Call[THASH, BHASH]) Return(_a0 bool) *ChainReceipt_IsUnmined_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_IsUnmined_Call[THASH, BHASH]) RunAndReturn(run func() bool) *ChainReceipt_IsUnmined_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// IsZero provides a mock function with no fields +func (_m *ChainReceipt[THASH, BHASH]) IsZero() bool { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for IsZero") + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// ChainReceipt_IsZero_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'IsZero' +type ChainReceipt_IsZero_Call[THASH chains.Hashable, BHASH chains.Hashable] struct { + *mock.Call +} + +// IsZero is a helper method to define mock.On call +func (_e *ChainReceipt_Expecter[THASH, BHASH]) IsZero() *ChainReceipt_IsZero_Call[THASH, BHASH] { + return &ChainReceipt_IsZero_Call[THASH, BHASH]{Call: _e.mock.On("IsZero")} +} + +func (_c *ChainReceipt_IsZero_Call[THASH, BHASH]) Run(run func()) *ChainReceipt_IsZero_Call[THASH, BHASH] { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ChainReceipt_IsZero_Call[THASH, BHASH]) Return(_a0 bool) *ChainReceipt_IsZero_Call[THASH, BHASH] { + _c.Call.Return(_a0) + return _c +} + +func (_c *ChainReceipt_IsZero_Call[THASH, BHASH]) RunAndReturn(run func() bool) *ChainReceipt_IsZero_Call[THASH, BHASH] { + _c.Call.Return(run) + return _c +} + +// NewChainReceipt creates a new instance of ChainReceipt. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewChainReceipt[THASH chains.Hashable, BHASH chains.Hashable](t interface { + mock.TestingT + Cleanup(func()) +}) *ChainReceipt[THASH, BHASH] { + mock := &ChainReceipt[THASH, BHASH]{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/common/txmgr/mocks/tx_manager.go b/common/txmgr/mocks/tx_manager.go index 91382f487b5..9cc17d19d96 100644 --- a/common/txmgr/mocks/tx_manager.go +++ b/common/txmgr/mocks/tx_manager.go @@ -36,6 +36,54 @@ func (_m *TxManager[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) EXPECT() *TxManage return &TxManager_Expecter[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]{mock: &_m.Mock} } +// CalculateFee provides a mock function with given fields: feeParts +func (_m *TxManager[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) CalculateFee(feeParts txmgr.FeeParts) *big.Int { + ret := _m.Called(feeParts) + + if len(ret) == 0 { + panic("no return value specified for CalculateFee") + } + + var r0 *big.Int + if rf, ok := ret.Get(0).(func(txmgr.FeeParts) *big.Int); ok { + r0 = rf(feeParts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*big.Int) + } + } + + return r0 +} + +// TxManager_CalculateFee_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CalculateFee' +type TxManager_CalculateFee_Call[CID chains.ID, HEAD chains.Head[BHASH], ADDR chains.Hashable, THASH chains.Hashable, BHASH chains.Hashable, SEQ chains.Sequence, FEE fees.Fee] struct { + *mock.Call +} + +// CalculateFee is a helper method to define mock.On call +// - feeParts txmgr.FeeParts +func (_e *TxManager_Expecter[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) CalculateFee(feeParts interface{}) *TxManager_CalculateFee_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE] { + return &TxManager_CalculateFee_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]{Call: _e.mock.On("CalculateFee", feeParts)} +} + +func (_c *TxManager_CalculateFee_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) Run(run func(feeParts txmgr.FeeParts)) *TxManager_CalculateFee_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE] { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(txmgr.FeeParts)) + }) + return _c +} + +func (_c *TxManager_CalculateFee_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) Return(_a0 *big.Int) *TxManager_CalculateFee_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE] { + _c.Call.Return(_a0) + return _c +} + +func (_c *TxManager_CalculateFee_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) RunAndReturn(run func(txmgr.FeeParts) *big.Int) *TxManager_CalculateFee_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE] { + _c.Call.Return(run) + return _c +} + // Close provides a mock function with no fields func (_m *TxManager[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) Close() error { ret := _m.Called() @@ -730,6 +778,65 @@ func (_c *TxManager_GetTransactionFee_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, F return _c } +// GetTransactionReceipt provides a mock function with given fields: ctx, transactionID +func (_m *TxManager[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) GetTransactionReceipt(ctx context.Context, transactionID string) (*types.ChainReceipt[THASH, BHASH], error) { + ret := _m.Called(ctx, transactionID) + + if len(ret) == 0 { + panic("no return value specified for GetTransactionReceipt") + } + + var r0 *types.ChainReceipt[THASH, BHASH] + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*types.ChainReceipt[THASH, BHASH], error)); ok { + return rf(ctx, transactionID) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *types.ChainReceipt[THASH, BHASH]); ok { + r0 = rf(ctx, transactionID) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.ChainReceipt[THASH, BHASH]) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, transactionID) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// TxManager_GetTransactionReceipt_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetTransactionReceipt' +type TxManager_GetTransactionReceipt_Call[CID chains.ID, HEAD chains.Head[BHASH], ADDR chains.Hashable, THASH chains.Hashable, BHASH chains.Hashable, SEQ chains.Sequence, FEE fees.Fee] struct { + *mock.Call +} + +// GetTransactionReceipt is a helper method to define mock.On call +// - ctx context.Context +// - transactionID string +func (_e *TxManager_Expecter[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) GetTransactionReceipt(ctx interface{}, transactionID interface{}) *TxManager_GetTransactionReceipt_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE] { + return &TxManager_GetTransactionReceipt_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]{Call: _e.mock.On("GetTransactionReceipt", ctx, transactionID)} +} + +func (_c *TxManager_GetTransactionReceipt_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) Run(run func(ctx context.Context, transactionID string)) *TxManager_GetTransactionReceipt_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE] { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *TxManager_GetTransactionReceipt_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) Return(receipt *types.ChainReceipt[THASH, BHASH], err error) *TxManager_GetTransactionReceipt_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE] { + _c.Call.Return(receipt, err) + return _c +} + +func (_c *TxManager_GetTransactionReceipt_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) RunAndReturn(run func(context.Context, string) (*types.ChainReceipt[THASH, BHASH], error)) *TxManager_GetTransactionReceipt_Call[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE] { + _c.Call.Return(run) + return _c +} + // GetTransactionStatus provides a mock function with given fields: ctx, transactionID func (_m *TxManager[CID, HEAD, ADDR, THASH, BHASH, SEQ, FEE]) GetTransactionStatus(ctx context.Context, transactionID string) (pkgtypes.TransactionStatus, error) { ret := _m.Called(ctx, transactionID) diff --git a/core/config/docs/chains-evm.toml b/core/config/docs/chains-evm.toml index ba1fd72b601..fa3a9a0bd7c 100644 --- a/core/config/docs/chains-evm.toml +++ b/core/config/docs/chains-evm.toml @@ -124,6 +124,8 @@ LogBroadcasterEnabled = true # Default NoNewFinalizedHeadsThreshold = '0' # Default [EVM.Transactions] +# ConfirmationTimeout time to wait for a TX to get into a block in the blockchain. This is used for the EVMService.SubmitTransaction operation. +ConfirmationTimeout = '60s' # Default # Enabled is a feature flag for the Transaction Manager. This flag also enables or disables the gas estimator since it is dependent on the TXM to start it. Enabled = true # Default # ForwardersEnabled enables or disables sending transactions through forwarder contracts. diff --git a/core/scripts/go.mod b/core/scripts/go.mod index f9b8dc63078..0336cc0ebe0 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -38,11 +38,11 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.60 github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 - github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d - github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a + github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 + github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 - github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 + github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a github.com/smartcontractkit/chainlink-testing-framework/framework v0.9.3 github.com/smartcontractkit/chainlink-testing-framework/lib v1.54.3 github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.2 @@ -394,8 +394,8 @@ require ( github.com/smartcontractkit/chainlink-aptos v0.0.0-20250624090157-6b89f926f864 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect - github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 // indirect - github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 // indirect + github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 // indirect + github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 // indirect github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e // indirect github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a // indirect github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250612182447-1c32d2efe48f // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 30e01550715..88acb828944 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1283,24 +1283,24 @@ github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 h1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097/go.mod h1:Yw7X+vtR7A9MBI+q5b0k/H2PlKy6cQOa7vAp4cshz2s= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed h1:rjtXQLTCLa/+AmMwMTP5WwJUdPBeBAF3Ivwc1GXetBw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed/go.mod h1:k3/Z6AvwurPUlfuDFEonRbkkiTSgNSrtVNhJEWNlUZA= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d h1:BS3gBU0+8C8HzLFNczE1ZI2E8pDYaXXlgAlBE0w7p0w= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d/go.mod h1:plVu/MNDcoGbX++P0Dhv8gTtpafG98HqG6BfNj+dfE0= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 h1:ZadFXdmkBFJz3GYPAF20IvtNSHbcRFoLrhCU/LKS9oQ= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5/go.mod h1:mRKPMPyJhg1RBjxtRTL2gHvRhTcZ+nk2Upu/u97Y16M= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7 h1:9wh1G+WbXwPVqf0cfSRSgwIcaXTQgvYezylEAfwmrbw= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7/go.mod h1:yaDOAZF6MNB+NGYpxGCUc+owIdKrjvFW0JODdTcQ3V0= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a h1:AVYA3UTkn2wjdpkTRhtXH0XgVBE25tXmfqxmEZhE+4s= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d h1:86gp4tIXRb6ccSrjcm4gV8iA5wJN6er3rJY9f2UxRLU= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae h1:BmqiIDbA9FB/uOCOHi/shgL7P0XmjFxhfRtJHdKPLE4= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae/go.mod h1:2MggrMtbhqr0u4U2pcYa21lvAtvaeSawjxdIy1ytHWE= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 h1:uSHuru/VuNLKTUOsN7R6UkweI8GAVP8VJMsWljzaDvY= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0/go.mod h1:U4vWLp0dTmYgiN3Y7BXasDfM8NF3ZTIhDo5NjM+7RhQ= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 h1:Q0tHb2GVGo7t/kKh0SiPXeXndDk2inbPlYyzQgCQIMo= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9/go.mod h1:GlSY0cLuXOdaZP8+7pQTezPUwJBW+ExMb5CGby4GGSU= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a h1:IYEy2gpMQRxO3HfuxEBIrfTFiMYTPt/6qhItUnnfIyc= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a/go.mod h1:LBBGlJSsxbMV71NJY79TeRZ0oZDFLB45h5pjGVnCjJ0= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 h1:8u9xUrC+yHrTDexOKDd+jrA6LCzFFHeX1G82oj2fsSI= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135/go.mod h1:NkvE4iQgiT7dMCP6U3xPELHhWhN5Xr6rHC0axRebyMU= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 h1:cy6V45uUMh/Ri28QR3wIcdLETcYQEAo06F7Dh40O5BA= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 h1:OpFlG2f+LXsDp3cejSQju2rmoNsxBlhgrwXMIsk72IA= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0/go.mod h1:X+a4k2a+2G2/yeAaRQMCTLmlhNdQYAeN6v+ZpLzRZww= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 h1:WLgEB8/lIfA1vI+7O4RE/PYitO57TRkKUqVllDIgJD4= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 h1:WRwVcv2IW59subaJDNl6B+N4OkZiAO7U2e9001XSw7c= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2/go.mod h1:+pRGfDej1r7cHMs1dYmuyPuOZzYB9Q+PKu0FvZOYlmw= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e h1:LRT+PltY99+hxZAJn+4nyTfqGVNEM1S6FJ675B9BtJo= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e/go.mod h1:jo+cUqNcHwN8IF7SInQNXDZ8qzBsyMpnLdYbDswviFc= github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a h1:O28vgyHM7QF1YLg1BwkQSIbOYA+t0RiH9+b+k90GPG8= diff --git a/core/services/chainlink/config_test.go b/core/services/chainlink/config_test.go index 7fffbbe6d63..491e35be9d5 100644 --- a/core/services/chainlink/config_test.go +++ b/core/services/chainlink/config_test.go @@ -678,6 +678,7 @@ func TestConfig_Marshal(t *testing.T) { TransactionManagerV2: evmcfg.TransactionManagerV2Config{ Enabled: ptr(false), }, + ConfirmationTimeout: &minute, }, HeadTracker: evmcfg.HeadTracker{ @@ -1118,6 +1119,7 @@ MaxQueued = 99 ReaperInterval = '1m0s' ReaperThreshold = '1m0s' ResendAfterThreshold = '1h0m0s' +ConfirmationTimeout = '1m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/core/services/chainlink/testdata/config-full.toml b/core/services/chainlink/testdata/config-full.toml index 2a47969aabf..916120f4ecb 100644 --- a/core/services/chainlink/testdata/config-full.toml +++ b/core/services/chainlink/testdata/config-full.toml @@ -375,6 +375,7 @@ MaxQueued = 99 ReaperInterval = '1m0s' ReaperThreshold = '1m0s' ResendAfterThreshold = '1h0m0s' +ConfirmationTimeout = '1m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/core/services/chainlink/testdata/config-multi-chain-effective.toml b/core/services/chainlink/testdata/config-multi-chain-effective.toml index 5b1c0a7fb23..a35d653eb01 100644 --- a/core/services/chainlink/testdata/config-multi-chain-effective.toml +++ b/core/services/chainlink/testdata/config-multi-chain-effective.toml @@ -358,6 +358,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [EVM.Transactions.AutoPurge] Enabled = false @@ -477,6 +478,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [EVM.Transactions.AutoPurge] Enabled = false @@ -590,6 +592,7 @@ MaxQueued = 5000 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/core/services/relay/evm/evm_service.go b/core/services/relay/evm/evm_service.go index bf4073ab735..4f7e80c30c3 100644 --- a/core/services/relay/evm/evm_service.go +++ b/core/services/relay/evm/evm_service.go @@ -2,11 +2,14 @@ package evm import ( "context" + "fmt" "math/big" + "time" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" gethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/google/uuid" "github.com/pkg/errors" commontypes "github.com/smartcontractkit/chainlink-common/pkg/types" @@ -17,8 +20,11 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/types/query/primitives" evmprimitives "github.com/smartcontractkit/chainlink-common/pkg/types/query/primitives/evm" "github.com/smartcontractkit/chainlink-evm/pkg/logpoller" + evmtxmgr "github.com/smartcontractkit/chainlink-evm/pkg/txmgr" "github.com/smartcontractkit/chainlink-evm/pkg/types" "github.com/smartcontractkit/chainlink-framework/chains" + "github.com/smartcontractkit/chainlink-framework/chains/txmgr" + txmgrtypes "github.com/smartcontractkit/chainlink-framework/chains/txmgr/types" ) // Direct RPC @@ -83,12 +89,12 @@ func (r *Relayer) LatestAndFinalizedHead(ctx context.Context) (evmtypes.Head, ev // TODO introduce parameters validation PLEX-1437 func (r *Relayer) QueryTrackedLogs(ctx context.Context, filterQuery []query.Expression, - limitAndSort query.LimitAndSort, confidenceLevel primitives.ConfidenceLevel) ([]*evmtypes.Log, error) { + limitAndSort query.LimitAndSort, confidenceLevel primitives.ConfidenceLevel, +) ([]*evmtypes.Log, error) { conformations := confidenceToConformations(confidenceLevel) filterQuery = append(filterQuery, logpoller.NewConfirmationsFilter(conformations)) queryName := queryNameFromFilter(filterQuery) logs, err := r.chain.LogPoller().FilteredLogs(ctx, filterQuery, limitAndSort, queryName) - if err != nil { return nil, err } @@ -125,7 +131,99 @@ func (r *Relayer) GetTransactionStatus(ctx context.Context, transactionID common return commontypes.Unknown, err } - return commontypes.TransactionStatus(status), nil + return status, nil +} + +func (r *Relayer) SubmitTransaction(ctx context.Context, txRequest evmtypes.SubmitTransactionRequest) (*evmtypes.TransactionResult, error) { + config := r.chain.Config() + + fromAddress := config.EVM().Workflow().FromAddress().Address() + var gasLimit uint64 + if txRequest.GasConfig != nil && txRequest.GasConfig.GasLimit != nil { + gasLimit = *txRequest.GasConfig.GasLimit + } + + uuid, err := uuid.NewUUID() + if err != nil { + return nil, err + } + txID := uuid.String() + + // PLEX-1524 - review which transmitter checker we should use + var checker evmtxmgr.TransmitCheckerSpec + checker.CheckerType = evmtxmgr.TransmitCheckerTypeSimulate + value := big.NewInt(0) + + // PLEX-1524 - Define how we should properly get the workflow execution ID into the meta without making the API CRE specific. + var txMeta *txmgrtypes.TxMeta[common.Address, common.Hash] + txmReq := evmtxmgr.TxRequest{ + FromAddress: fromAddress, + ToAddress: txRequest.To, + EncodedPayload: txRequest.Data, + FeeLimit: gasLimit, + Meta: txMeta, + IdempotencyKey: &txID, + // PLEX-1524 - Review strategy to be used. + Strategy: txmgr.NewSendEveryStrategy(), + Checker: checker, + Value: *value, + } + + _, err = r.chain.TxManager().CreateTransaction(ctx, txmReq) + if err != nil { + return nil, fmt.Errorf("%w; failed to create tx", err) + } + + maximumWaitTimeForConfirmation := config.EVM().ConfirmationTimeout() + start := time.Now() +StatusCheckingLoop: + for { + txStatus, txStatusErr := r.chain.TxManager().GetTransactionStatus(ctx, txID) + if txStatusErr != nil { + return nil, txStatusErr + } + switch txStatus { + case commontypes.Fatal, commontypes.Failed: + return &evmtypes.TransactionResult{ + TxStatus: evm.TxFatal, + TxHash: evmtypes.Hash{}, + }, nil + + case commontypes.Unconfirmed, commontypes.Finalized: + break StatusCheckingLoop + case commontypes.Pending, commontypes.Unknown: + default: + return nil, fmt.Errorf("unexpected transaction status %d for tx with ID %s", txStatus, txID) + } + if time.Since(start) > maximumWaitTimeForConfirmation { + return nil, errors.Errorf("Wait time for Tx %s to get confirmed was greater than maximum wait time %d", txID, maximumWaitTimeForConfirmation) + } + // PLEX-1524 - Use ticker instead of time.Sleep and make the time configurable + time.Sleep(100 * time.Millisecond) + } + + receipt, err := r.chain.TxManager().GetTransactionReceipt(ctx, txID) + if err != nil { + return nil, fmt.Errorf("failed to get TX receipt for tx with ID %s: %w", txID, err) + } + if receipt == nil { + return nil, fmt.Errorf("receipt was nil for TX with ID %s: %w", txID, err) + } + + return &evmtypes.TransactionResult{ + TxStatus: evm.TxSuccess, + TxHash: (*receipt).GetTxHash(), + }, nil +} + +func (r *Relayer) CalculateTransactionFee(ctx context.Context, receipt evm.ReceiptGasInfo) (*evm.TransactionFee, error) { + txFee := r.chain.TxManager().CalculateFee(txmgr.FeeParts{ + GasUsed: receipt.GasUsed, + EffectiveGasPrice: receipt.EffectiveGasPrice, + }) + return &evmtypes.TransactionFee{ + TransactionFee: txFee, + }, nil } func queryNameFromFilter(filterQuery []query.Expression) string { diff --git a/core/services/relay/evm/evm_service_test.go b/core/services/relay/evm/evm_service_test.go index b6cc7b20f64..66c32f206bb 100644 --- a/core/services/relay/evm/evm_service_test.go +++ b/core/services/relay/evm/evm_service_test.go @@ -1,7 +1,9 @@ package evm import ( + "errors" "math/big" + "slices" "testing" "time" @@ -11,10 +13,13 @@ import ( gethtypes "github.com/ethereum/go-ethereum/core/types" - evmtypes "github.com/smartcontractkit/chainlink-common/pkg/types/chains/evm" + commontypes "github.com/smartcontractkit/chainlink-common/pkg/types" + "github.com/smartcontractkit/chainlink-common/pkg/types/chains/evm" "github.com/smartcontractkit/chainlink-evm/pkg/client/clienttest" + configmocks "github.com/smartcontractkit/chainlink-evm/pkg/config/mocks" "github.com/smartcontractkit/chainlink-evm/pkg/heads/headstest" "github.com/smartcontractkit/chainlink-evm/pkg/logpoller" + "github.com/smartcontractkit/chainlink-evm/pkg/txmgr" evmmocks "github.com/smartcontractkit/chainlink/v2/common/chains/mocks" lpmocks "github.com/smartcontractkit/chainlink/v2/common/logpoller/mocks" txmmocks "github.com/smartcontractkit/chainlink/v2/common/txmgr/mocks" @@ -22,11 +27,25 @@ import ( "github.com/smartcontractkit/chainlink-evm/pkg/types" ) -func TestEVMService(t *testing.T) { - t.Parallel() - ctx := t.Context() +const ExpectedTxHash = "0xabcd" + +type Mocks struct { + Chain *evmmocks.Chain + TxManager *txmmocks.MockEvmTxManager + Config *configmocks.ChainScopedConfig + EVM *configmocks.EVM + Workflow *configmocks.Workflow + EvmClient *clienttest.Client + Poller *lpmocks.LogPoller + Relayer *Relayer +} + +func setupMocksAndRelayer(t *testing.T) (*Mocks, *Relayer) { chain := evmmocks.NewChain(t) txManager := txmmocks.NewMockEvmTxManager(t) + mockConfig := configmocks.NewChainScopedConfig(t) + mockEVM := configmocks.NewEVM(t) + mockWorkflow := configmocks.NewWorkflow(t) evmClient := clienttest.NewClient(t) poller := lpmocks.NewLogPoller(t) ht := headstest.NewTracker[*types.Head](t) @@ -35,28 +54,102 @@ func TestEVMService(t *testing.T) { chain.On("LogPoller").Return(poller).Maybe() chain.On("HeadTracker").Return(ht).Maybe() chain.On("Client").Return(evmClient).Maybe() + chain.EXPECT().Config().Return(mockConfig).Maybe() + mockConfig.EXPECT().EVM().Return(mockEVM).Maybe() + mockEVM.EXPECT().Workflow().Return(mockWorkflow).Maybe() relayer := &Relayer{ chain: chain, } + return &Mocks{ + Chain: chain, + TxManager: txManager, + Config: mockConfig, + EVM: mockEVM, + Workflow: mockWorkflow, + EvmClient: evmClient, + Poller: poller, + }, relayer +} + +type SubmitTransactionTestCase struct { + Name string + SetupMocks func(m *Mocks, ctx any) + ExpectedResult *evm.TransactionResult + ExpectedError string +} + +func runSubmitTransactionTest(t *testing.T, tc SubmitTransactionTestCase) { + ctx := t.Context() + mocks, relayer := setupMocksAndRelayer(t) + + if tc.SetupMocks != nil { + tc.SetupMocks(mocks, ctx) + } + + setCommonSubmitTransactionMocks(mocks, ctx) + + receiver := createToAddress() + gasLimit := uint64(1000) + result, err := relayer.SubmitTransaction(ctx, evm.SubmitTransactionRequest{ + To: receiver, + Data: createPayload(), + GasConfig: &evm.GasConfig{ + GasLimit: &gasLimit, + }, + }) + + if tc.ExpectedError != "" { + require.Error(t, err) + require.Contains(t, err.Error(), tc.ExpectedError) + } else { + require.NoError(t, err) + require.Equal(t, tc.ExpectedResult, result) + } +} + +func setCommonSubmitTransactionMocks(m *Mocks, ctx any) { + fromAddress := createFromAddress() + m.Workflow.EXPECT().FromAddress().Return(&fromAddress) + m.EVM.EXPECT().ConfirmationTimeout().Return(500 * time.Millisecond) +} + +func createFromAddress() types.EIP55Address { + address, _ := types.NewEIP55Address("0x222") + return address +} + +func createToAddress() common.Address { + return common.HexToAddress("0x555") +} + +func createPayload() evm.ABIPayload { + return evm.ABIPayload("kitties") +} + +func TestEVMService(t *testing.T) { + t.Parallel() + ctx := t.Context() + t.Run("RegisterLogTracking", func(t *testing.T) { - filter := evmtypes.LPFilterQuery{ + mocks, relayer := setupMocksAndRelayer(t) + filter := evm.LPFilterQuery{ Name: "filter-1", Retention: time.Second, - Addresses: []evmtypes.Address{common.HexToAddress("0x123")}, - EventSigs: []evmtypes.Hash{common.HexToHash("0x321")}, - Topic2: []evmtypes.Hash{common.HexToHash("0x222")}, - Topic3: []evmtypes.Hash{common.HexToHash("0x543")}, - Topic4: []evmtypes.Hash{common.HexToHash("0x432")}, + Addresses: []evm.Address{common.HexToAddress("0x123")}, + EventSigs: []evm.Hash{common.HexToHash("0x321")}, + Topic2: []evm.Hash{common.HexToHash("0x222")}, + Topic3: []evm.Hash{common.HexToHash("0x543")}, + Topic4: []evm.Hash{common.HexToHash("0x432")}, MaxLogsKept: 100, LogsPerBlock: 10, } - poller.On("HasFilter", mock.MatchedBy(func(fname string) bool { + mocks.Poller.On("HasFilter", mock.MatchedBy(func(fname string) bool { return fname == filter.Name })).Return(false) - poller.On("RegisterFilter", ctx, mock.MatchedBy(func(f logpoller.Filter) bool { + mocks.Poller.On("RegisterFilter", ctx, mock.MatchedBy(func(f logpoller.Filter) bool { return f.LogsPerBlock == filter.LogsPerBlock && f.Retention == filter.Retention && f.Topic2[0] == filter.Topic2[0] && @@ -73,6 +166,8 @@ func TestEVMService(t *testing.T) { }) t.Run("GetTransactionByHash", func(t *testing.T) { + mocks, relayer := setupMocksAndRelayer(t) + hash := common.HexToHash("0x123") nonce := uint64(1) to := common.HexToAddress("0x555") @@ -82,7 +177,7 @@ func TestEVMService(t *testing.T) { data := []byte("kitties") transaction := gethtypes.NewTransaction(nonce, to, amount, gasLimit, gasPrice, data) - evmClient.On("TransactionByHash", ctx, hash).Return(transaction, nil) + mocks.EvmClient.On("TransactionByHash", ctx, hash).Return(transaction, nil) tx, err := relayer.GetTransactionByHash(ctx, hash) require.NoError(t, err) require.Equal(t, transaction.Hash().Bytes(), tx.Hash[:]) @@ -92,6 +187,114 @@ func TestEVMService(t *testing.T) { require.Equal(t, transaction.Gas(), tx.Gas) require.Equal(t, transaction.To().Bytes(), tx.To[:]) }) + + submitTxCases := []SubmitTransactionTestCase{ + { + Name: "Executes successfully", + SetupMocks: func(m *Mocks, ctx any) { + expectedTxRequest := txmgr.TxRequest{ + FromAddress: createFromAddress().Address(), + ToAddress: createToAddress(), + EncodedPayload: createPayload(), + } + expectedTx := txmgr.Tx{} + m.TxManager.EXPECT().CreateTransaction(ctx, mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { + return txRequest.FromAddress == expectedTxRequest.FromAddress && + txRequest.ToAddress == expectedTxRequest.ToAddress && + slices.Equal(txRequest.EncodedPayload, expectedTxRequest.EncodedPayload) + })).Return(expectedTx, nil) + m.TxManager.EXPECT().GetTransactionStatus(ctx, mock.Anything).Return(commontypes.Unconfirmed, nil) + txHash := common.HexToHash(ExpectedTxHash) + mockReceipt := NewChainReceipt(txHash, t) + m.TxManager.EXPECT().GetTransactionReceipt(ctx, mock.Anything).Return(&mockReceipt, nil) + }, + ExpectedResult: &evm.TransactionResult{ + TxHash: common.HexToHash(ExpectedTxHash), + TxStatus: evm.TxSuccess, + }, + }, + { + Name: "Fail creating transaction", + SetupMocks: func(m *Mocks, ctx any) { + expectedTx := txmgr.Tx{} + m.TxManager.EXPECT().CreateTransaction(ctx, mock.Anything).Return(expectedTx, nil) + m.TxManager.EXPECT().GetTransactionStatus(ctx, mock.Anything).Return(commontypes.Unconfirmed, nil) + expectedMessage := "fail creating transaction" + m.TxManager.EXPECT().GetTransactionReceipt(ctx, mock.Anything).Return(nil, errors.New(expectedMessage)) + }, + ExpectedError: "fail creating transaction", + }, + { + Name: "Fails getting transaction status", + SetupMocks: func(m *Mocks, ctx any) { + expectedTx := txmgr.Tx{} + m.TxManager.EXPECT().CreateTransaction(ctx, mock.Anything).Return(expectedTx, nil) + expectedMessage := "fail getting transaction status" + m.TxManager.EXPECT().GetTransactionStatus(ctx, mock.Anything).Return(commontypes.Fatal, errors.New(expectedMessage)) + }, + ExpectedError: "fail getting transaction status", + }, + { + Name: "Success with pending status and then finalized status", + SetupMocks: func(m *Mocks, ctx any) { + runSubmitTxGettingDifferentStatus(t, m, ctx, commontypes.Pending, commontypes.Finalized) + }, + ExpectedResult: &evm.TransactionResult{ + TxHash: common.HexToHash(ExpectedTxHash), + TxStatus: evm.TxSuccess, + }, + }, + { + Name: "Success with unknown status and then finalized status", + SetupMocks: func(m *Mocks, ctx any) { + runSubmitTxGettingDifferentStatus(t, m, ctx, commontypes.Unknown, commontypes.Finalized) + }, + ExpectedResult: &evm.TransactionResult{ + TxHash: common.HexToHash(ExpectedTxHash), + TxStatus: evm.TxSuccess, + }, + }, + { + Name: "Success with unknown status and then unconfirmed status", + SetupMocks: func(m *Mocks, ctx any) { + runSubmitTxGettingDifferentStatus(t, m, ctx, commontypes.Unknown, commontypes.Unconfirmed) + }, + ExpectedResult: &evm.TransactionResult{ + TxHash: common.HexToHash(ExpectedTxHash), + TxStatus: evm.TxSuccess, + }, + }, + { + Name: "Fails with pending and later on Fatal", + SetupMocks: func(m *Mocks, ctx any) { + expectedTx := txmgr.Tx{} + m.TxManager.EXPECT().CreateTransaction(ctx, mock.Anything).Return(expectedTx, nil) + m.TxManager.EXPECT().GetTransactionStatus(ctx, mock.Anything).Return(commontypes.Pending, nil).Once() + m.TxManager.EXPECT().GetTransactionStatus(ctx, mock.Anything).Return(commontypes.Fatal, nil).Once() + }, + ExpectedResult: &evm.TransactionResult{ + TxHash: common.Hash{}, + TxStatus: evm.TxFatal, + }, + }, + } + + for _, tc := range submitTxCases { + t.Run("SubmitTransaction - "+tc.Name, func(t *testing.T) { + runSubmitTransactionTest(t, tc) + }) + } +} + +func runSubmitTxGettingDifferentStatus(t *testing.T, m *Mocks, ctx any, expectedStatus ...commontypes.TransactionStatus) { + expectedTx := txmgr.Tx{} + m.TxManager.EXPECT().CreateTransaction(ctx, mock.Anything).Return(expectedTx, nil) + for _, status := range expectedStatus { + m.TxManager.EXPECT().GetTransactionStatus(ctx, mock.Anything).Return(status, nil).Once() + } + txHash := common.HexToHash(ExpectedTxHash) + mockReceipt := NewChainReceipt(txHash, t) + m.TxManager.EXPECT().GetTransactionReceipt(ctx, mock.Anything).Return(&mockReceipt, nil) } func TestConverters(t *testing.T) { @@ -128,3 +331,9 @@ func TestConverters(t *testing.T) { require.Equal(t, tx.Data(), result.Data) }) } + +func NewChainReceipt(txHash common.Hash, t *testing.T) txmgr.ChainReceipt { + mock := txmmocks.NewChainReceipt[common.Hash, common.Hash](t) + mock.EXPECT().GetTxHash().Return(txHash) + return mock +} diff --git a/core/services/standardcapabilities/standard_capabilities.go b/core/services/standardcapabilities/standard_capabilities.go index f69f576a541..5d756f9119e 100644 --- a/core/services/standardcapabilities/standard_capabilities.go +++ b/core/services/standardcapabilities/standard_capabilities.go @@ -17,8 +17,10 @@ import ( const defaultStartTimeout = 3 * time.Minute -var ErrServiceStopped = errors.New("service stopped") -var ErrServiceNotReady = errors.New("service not ready") +var ( + ErrServiceStopped = errors.New("service stopped") + ErrServiceNotReady = errors.New("service not ready") +) type StandardCapabilities struct { services.StateMachine diff --git a/core/web/resolver/testdata/config-full.toml b/core/web/resolver/testdata/config-full.toml index e9746978f6e..fe7bc40aec9 100644 --- a/core/web/resolver/testdata/config-full.toml +++ b/core/web/resolver/testdata/config-full.toml @@ -375,6 +375,7 @@ MaxQueued = 99 ReaperInterval = '1m0s' ReaperThreshold = '1m0s' ResendAfterThreshold = '1h0m0s' +ConfirmationTimeout = '1m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/core/web/resolver/testdata/config-multi-chain-effective.toml b/core/web/resolver/testdata/config-multi-chain-effective.toml index 23c0b6e053e..28554105cec 100644 --- a/core/web/resolver/testdata/config-multi-chain-effective.toml +++ b/core/web/resolver/testdata/config-multi-chain-effective.toml @@ -358,6 +358,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [EVM.Transactions.AutoPurge] Enabled = false @@ -477,6 +478,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [EVM.Transactions.AutoPurge] Enabled = false @@ -590,6 +592,7 @@ MaxQueued = 5000 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/deployment/go.mod b/deployment/go.mod index 1f416a592de..fe8a752b6d4 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -33,10 +33,10 @@ require ( github.com/smartcontractkit/chainlink-aptos v0.0.0-20250624090157-6b89f926f864 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed - github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d - github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a + github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 + github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 - github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 + github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a github.com/smartcontractkit/chainlink-protos/job-distributor v0.12.0 github.com/smartcontractkit/chainlink-protos/orchestrator v0.7.0 @@ -378,8 +378,8 @@ require ( github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect - github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 // indirect - github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 // indirect + github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 // indirect + github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 // indirect github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e // indirect github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250612182447-1c32d2efe48f // indirect github.com/smartcontractkit/chainlink-protos/rmn/v1.6/go v0.0.0-20250131130834-15e0d4cde2a6 // indirect diff --git a/deployment/go.sum b/deployment/go.sum index dddd4ec6de4..f37dc43db7d 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -1259,24 +1259,24 @@ github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 h1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097/go.mod h1:Yw7X+vtR7A9MBI+q5b0k/H2PlKy6cQOa7vAp4cshz2s= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed h1:rjtXQLTCLa/+AmMwMTP5WwJUdPBeBAF3Ivwc1GXetBw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed/go.mod h1:k3/Z6AvwurPUlfuDFEonRbkkiTSgNSrtVNhJEWNlUZA= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d h1:BS3gBU0+8C8HzLFNczE1ZI2E8pDYaXXlgAlBE0w7p0w= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d/go.mod h1:plVu/MNDcoGbX++P0Dhv8gTtpafG98HqG6BfNj+dfE0= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 h1:ZadFXdmkBFJz3GYPAF20IvtNSHbcRFoLrhCU/LKS9oQ= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5/go.mod h1:mRKPMPyJhg1RBjxtRTL2gHvRhTcZ+nk2Upu/u97Y16M= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7 h1:9wh1G+WbXwPVqf0cfSRSgwIcaXTQgvYezylEAfwmrbw= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7/go.mod h1:yaDOAZF6MNB+NGYpxGCUc+owIdKrjvFW0JODdTcQ3V0= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a h1:AVYA3UTkn2wjdpkTRhtXH0XgVBE25tXmfqxmEZhE+4s= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d h1:86gp4tIXRb6ccSrjcm4gV8iA5wJN6er3rJY9f2UxRLU= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae h1:BmqiIDbA9FB/uOCOHi/shgL7P0XmjFxhfRtJHdKPLE4= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae/go.mod h1:2MggrMtbhqr0u4U2pcYa21lvAtvaeSawjxdIy1ytHWE= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 h1:uSHuru/VuNLKTUOsN7R6UkweI8GAVP8VJMsWljzaDvY= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0/go.mod h1:U4vWLp0dTmYgiN3Y7BXasDfM8NF3ZTIhDo5NjM+7RhQ= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 h1:Q0tHb2GVGo7t/kKh0SiPXeXndDk2inbPlYyzQgCQIMo= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9/go.mod h1:GlSY0cLuXOdaZP8+7pQTezPUwJBW+ExMb5CGby4GGSU= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a h1:IYEy2gpMQRxO3HfuxEBIrfTFiMYTPt/6qhItUnnfIyc= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a/go.mod h1:LBBGlJSsxbMV71NJY79TeRZ0oZDFLB45h5pjGVnCjJ0= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 h1:8u9xUrC+yHrTDexOKDd+jrA6LCzFFHeX1G82oj2fsSI= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135/go.mod h1:NkvE4iQgiT7dMCP6U3xPELHhWhN5Xr6rHC0axRebyMU= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 h1:cy6V45uUMh/Ri28QR3wIcdLETcYQEAo06F7Dh40O5BA= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 h1:OpFlG2f+LXsDp3cejSQju2rmoNsxBlhgrwXMIsk72IA= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0/go.mod h1:X+a4k2a+2G2/yeAaRQMCTLmlhNdQYAeN6v+ZpLzRZww= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 h1:WLgEB8/lIfA1vI+7O4RE/PYitO57TRkKUqVllDIgJD4= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 h1:WRwVcv2IW59subaJDNl6B+N4OkZiAO7U2e9001XSw7c= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2/go.mod h1:+pRGfDej1r7cHMs1dYmuyPuOZzYB9Q+PKu0FvZOYlmw= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e h1:LRT+PltY99+hxZAJn+4nyTfqGVNEM1S6FJ675B9BtJo= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e/go.mod h1:jo+cUqNcHwN8IF7SInQNXDZ8qzBsyMpnLdYbDswviFc= github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a h1:O28vgyHM7QF1YLg1BwkQSIbOYA+t0RiH9+b+k90GPG8= diff --git a/docs/CONFIG.md b/docs/CONFIG.md index ca9456d2166..5ce2856e16d 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -2220,6 +2220,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [Transactions.AutoPurge] Enabled = false @@ -2333,6 +2334,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -2446,6 +2448,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -2559,6 +2562,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -2673,6 +2677,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -2791,6 +2796,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -2904,6 +2910,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -3016,6 +3023,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -3128,6 +3136,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -3241,6 +3250,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -3354,6 +3364,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -3468,6 +3479,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -3581,6 +3593,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -3694,6 +3707,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -3808,6 +3822,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -3925,6 +3940,7 @@ MaxQueued = 5000 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -4038,6 +4054,7 @@ MaxQueued = 500 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -4151,6 +4168,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -4265,6 +4283,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -4383,6 +4402,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -4498,6 +4518,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -4613,6 +4634,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -4730,6 +4752,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -4847,6 +4870,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '7m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -4963,6 +4987,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -5075,6 +5100,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -5189,6 +5215,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -5307,6 +5334,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -5424,6 +5452,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '2m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -5538,6 +5567,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '2m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -5652,6 +5682,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -5769,6 +5800,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -5886,6 +5918,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -6004,6 +6037,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -6121,6 +6155,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -6235,6 +6270,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -6349,6 +6385,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -6465,6 +6502,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -6579,6 +6617,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -6697,6 +6736,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -6812,6 +6852,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -6926,6 +6967,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -7039,6 +7081,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -7151,6 +7194,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -7265,6 +7309,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -7383,6 +7428,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -7499,6 +7545,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '0s' ResendAfterThreshold = '0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -7613,6 +7660,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -7731,6 +7779,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -7848,6 +7897,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -7961,6 +8011,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -8075,6 +8126,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -8193,6 +8245,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -8306,6 +8359,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -8419,6 +8473,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -8532,6 +8587,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -8645,6 +8701,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -8758,6 +8815,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -8873,6 +8931,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -8991,6 +9050,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -9110,6 +9170,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -9227,6 +9288,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -9341,6 +9403,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -9457,6 +9520,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -9571,6 +9635,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -9685,6 +9750,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -9802,6 +9868,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -9918,6 +9985,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -10032,6 +10100,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -10150,6 +10219,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '7m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -10270,6 +10340,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -10387,6 +10458,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -10500,6 +10572,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '2m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -10617,6 +10690,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -10730,6 +10804,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -10844,6 +10919,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -10958,6 +11034,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -11078,6 +11155,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -11197,6 +11275,7 @@ MaxQueued = 500 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -11311,6 +11390,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -11427,6 +11507,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -11540,6 +11621,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -11655,6 +11737,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -11771,6 +11854,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -11889,6 +11973,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -12006,6 +12091,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -12122,6 +12208,7 @@ MaxQueued = 5000 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -12235,6 +12322,7 @@ MaxQueued = 5000 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -12348,6 +12436,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -12461,6 +12550,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -12575,6 +12665,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -12692,6 +12783,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -12810,6 +12902,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -12926,6 +13019,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -13038,6 +13132,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -13151,6 +13246,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -13267,6 +13363,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -13379,6 +13476,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -13493,6 +13591,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -13609,6 +13708,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -13722,6 +13822,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -13836,6 +13937,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -13953,6 +14055,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -14070,6 +14173,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -14187,6 +14291,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -14306,6 +14411,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -14424,6 +14530,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '3m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = true @@ -14538,6 +14645,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '2m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -14655,6 +14763,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -14773,6 +14882,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -14891,6 +15001,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -15008,6 +15119,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -15124,6 +15236,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -15238,6 +15351,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '30s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -15356,6 +15470,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -15473,6 +15588,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -15590,6 +15706,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -15707,6 +15824,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -15820,6 +15938,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '1m0s' [Transactions.AutoPurge] Enabled = false @@ -16128,6 +16247,7 @@ Set to zero to disable. ## EVM.Transactions ```toml [EVM.Transactions] +ConfirmationTimeout = '60s' # Default Enabled = true # Default ForwardersEnabled = false # Default MaxInFlight = 16 # Default @@ -16138,6 +16258,12 @@ ResendAfterThreshold = '1m' # Default ``` +### ConfirmationTimeout +```toml +ConfirmationTimeout = '60s' # Default +``` +ConfirmationTimeout time to wait for a TX to get into a block in the blockchain. This is used for the EVMService.SubmitTransaction operation. + ### Enabled ```toml Enabled = true # Default diff --git a/go.mod b/go.mod index 13ba4243941..ab8973d7efa 100644 --- a/go.mod +++ b/go.mod @@ -79,13 +79,13 @@ require ( github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed - github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d - github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a + github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 + github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae - github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 + github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 - github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 - github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 + github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 + github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250612182447-1c32d2efe48f github.com/smartcontractkit/chainlink-protos/orchestrator v0.7.0 diff --git a/go.sum b/go.sum index 0aeddbf92b5..cb2ae17cd77 100644 --- a/go.sum +++ b/go.sum @@ -1084,22 +1084,22 @@ github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 h1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097/go.mod h1:Yw7X+vtR7A9MBI+q5b0k/H2PlKy6cQOa7vAp4cshz2s= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed h1:rjtXQLTCLa/+AmMwMTP5WwJUdPBeBAF3Ivwc1GXetBw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed/go.mod h1:k3/Z6AvwurPUlfuDFEonRbkkiTSgNSrtVNhJEWNlUZA= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d h1:BS3gBU0+8C8HzLFNczE1ZI2E8pDYaXXlgAlBE0w7p0w= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d/go.mod h1:plVu/MNDcoGbX++P0Dhv8gTtpafG98HqG6BfNj+dfE0= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 h1:ZadFXdmkBFJz3GYPAF20IvtNSHbcRFoLrhCU/LKS9oQ= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5/go.mod h1:mRKPMPyJhg1RBjxtRTL2gHvRhTcZ+nk2Upu/u97Y16M= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7 h1:9wh1G+WbXwPVqf0cfSRSgwIcaXTQgvYezylEAfwmrbw= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7/go.mod h1:yaDOAZF6MNB+NGYpxGCUc+owIdKrjvFW0JODdTcQ3V0= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a h1:AVYA3UTkn2wjdpkTRhtXH0XgVBE25tXmfqxmEZhE+4s= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d h1:86gp4tIXRb6ccSrjcm4gV8iA5wJN6er3rJY9f2UxRLU= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae h1:BmqiIDbA9FB/uOCOHi/shgL7P0XmjFxhfRtJHdKPLE4= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae/go.mod h1:2MggrMtbhqr0u4U2pcYa21lvAtvaeSawjxdIy1ytHWE= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 h1:Q0tHb2GVGo7t/kKh0SiPXeXndDk2inbPlYyzQgCQIMo= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9/go.mod h1:GlSY0cLuXOdaZP8+7pQTezPUwJBW+ExMb5CGby4GGSU= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a h1:IYEy2gpMQRxO3HfuxEBIrfTFiMYTPt/6qhItUnnfIyc= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a/go.mod h1:LBBGlJSsxbMV71NJY79TeRZ0oZDFLB45h5pjGVnCjJ0= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 h1:8u9xUrC+yHrTDexOKDd+jrA6LCzFFHeX1G82oj2fsSI= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135/go.mod h1:NkvE4iQgiT7dMCP6U3xPELHhWhN5Xr6rHC0axRebyMU= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 h1:cy6V45uUMh/Ri28QR3wIcdLETcYQEAo06F7Dh40O5BA= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 h1:OpFlG2f+LXsDp3cejSQju2rmoNsxBlhgrwXMIsk72IA= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0/go.mod h1:X+a4k2a+2G2/yeAaRQMCTLmlhNdQYAeN6v+ZpLzRZww= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 h1:WLgEB8/lIfA1vI+7O4RE/PYitO57TRkKUqVllDIgJD4= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 h1:WRwVcv2IW59subaJDNl6B+N4OkZiAO7U2e9001XSw7c= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2/go.mod h1:+pRGfDej1r7cHMs1dYmuyPuOZzYB9Q+PKu0FvZOYlmw= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e h1:LRT+PltY99+hxZAJn+4nyTfqGVNEM1S6FJ675B9BtJo= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e/go.mod h1:jo+cUqNcHwN8IF7SInQNXDZ8qzBsyMpnLdYbDswviFc= github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a h1:O28vgyHM7QF1YLg1BwkQSIbOYA+t0RiH9+b+k90GPG8= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 80a33fc177c..8fe66e504eb 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -47,9 +47,9 @@ require ( github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed - github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d + github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 - github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 + github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a github.com/smartcontractkit/chainlink-protos/job-distributor v0.12.0 github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.5 github.com/smartcontractkit/chainlink-testing-framework/lib v1.52.4 @@ -457,11 +457,11 @@ require ( github.com/sirupsen/logrus v1.9.3 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20250624090157-6b89f926f864 // indirect - github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a // indirect + github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect - github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 // indirect - github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 // indirect + github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 // indirect + github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 // indirect github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e // indirect github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a // indirect github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250612182447-1c32d2efe48f // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 4f743462f9c..4673d3188c4 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1484,24 +1484,24 @@ github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 h1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097/go.mod h1:Yw7X+vtR7A9MBI+q5b0k/H2PlKy6cQOa7vAp4cshz2s= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed h1:rjtXQLTCLa/+AmMwMTP5WwJUdPBeBAF3Ivwc1GXetBw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed/go.mod h1:k3/Z6AvwurPUlfuDFEonRbkkiTSgNSrtVNhJEWNlUZA= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d h1:BS3gBU0+8C8HzLFNczE1ZI2E8pDYaXXlgAlBE0w7p0w= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d/go.mod h1:plVu/MNDcoGbX++P0Dhv8gTtpafG98HqG6BfNj+dfE0= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 h1:ZadFXdmkBFJz3GYPAF20IvtNSHbcRFoLrhCU/LKS9oQ= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5/go.mod h1:mRKPMPyJhg1RBjxtRTL2gHvRhTcZ+nk2Upu/u97Y16M= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7 h1:9wh1G+WbXwPVqf0cfSRSgwIcaXTQgvYezylEAfwmrbw= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7/go.mod h1:yaDOAZF6MNB+NGYpxGCUc+owIdKrjvFW0JODdTcQ3V0= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a h1:AVYA3UTkn2wjdpkTRhtXH0XgVBE25tXmfqxmEZhE+4s= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d h1:86gp4tIXRb6ccSrjcm4gV8iA5wJN6er3rJY9f2UxRLU= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae h1:BmqiIDbA9FB/uOCOHi/shgL7P0XmjFxhfRtJHdKPLE4= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae/go.mod h1:2MggrMtbhqr0u4U2pcYa21lvAtvaeSawjxdIy1ytHWE= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 h1:uSHuru/VuNLKTUOsN7R6UkweI8GAVP8VJMsWljzaDvY= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0/go.mod h1:U4vWLp0dTmYgiN3Y7BXasDfM8NF3ZTIhDo5NjM+7RhQ= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 h1:Q0tHb2GVGo7t/kKh0SiPXeXndDk2inbPlYyzQgCQIMo= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9/go.mod h1:GlSY0cLuXOdaZP8+7pQTezPUwJBW+ExMb5CGby4GGSU= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a h1:IYEy2gpMQRxO3HfuxEBIrfTFiMYTPt/6qhItUnnfIyc= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a/go.mod h1:LBBGlJSsxbMV71NJY79TeRZ0oZDFLB45h5pjGVnCjJ0= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 h1:8u9xUrC+yHrTDexOKDd+jrA6LCzFFHeX1G82oj2fsSI= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135/go.mod h1:NkvE4iQgiT7dMCP6U3xPELHhWhN5Xr6rHC0axRebyMU= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 h1:cy6V45uUMh/Ri28QR3wIcdLETcYQEAo06F7Dh40O5BA= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 h1:OpFlG2f+LXsDp3cejSQju2rmoNsxBlhgrwXMIsk72IA= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0/go.mod h1:X+a4k2a+2G2/yeAaRQMCTLmlhNdQYAeN6v+ZpLzRZww= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 h1:WLgEB8/lIfA1vI+7O4RE/PYitO57TRkKUqVllDIgJD4= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 h1:WRwVcv2IW59subaJDNl6B+N4OkZiAO7U2e9001XSw7c= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2/go.mod h1:+pRGfDej1r7cHMs1dYmuyPuOZzYB9Q+PKu0FvZOYlmw= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e h1:LRT+PltY99+hxZAJn+4nyTfqGVNEM1S6FJ675B9BtJo= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e/go.mod h1:jo+cUqNcHwN8IF7SInQNXDZ8qzBsyMpnLdYbDswviFc= github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a h1:O28vgyHM7QF1YLg1BwkQSIbOYA+t0RiH9+b+k90GPG8= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 2777fad9339..0681fc3771f 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -29,9 +29,9 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.60 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed - github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d + github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 - github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 + github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a github.com/smartcontractkit/chainlink-testing-framework/framework v0.9.0 github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.5 github.com/smartcontractkit/chainlink-testing-framework/lib v1.52.4 @@ -447,11 +447,11 @@ require ( github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20250624090157-6b89f926f864 // indirect github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect - github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a // indirect + github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect - github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 // indirect - github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 // indirect + github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 // indirect + github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 // indirect github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e // indirect github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a // indirect github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250612182447-1c32d2efe48f // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index f9da707c613..cb736a8ef39 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -1466,24 +1466,24 @@ github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 h1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097/go.mod h1:Yw7X+vtR7A9MBI+q5b0k/H2PlKy6cQOa7vAp4cshz2s= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed h1:rjtXQLTCLa/+AmMwMTP5WwJUdPBeBAF3Ivwc1GXetBw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed/go.mod h1:k3/Z6AvwurPUlfuDFEonRbkkiTSgNSrtVNhJEWNlUZA= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d h1:BS3gBU0+8C8HzLFNczE1ZI2E8pDYaXXlgAlBE0w7p0w= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d/go.mod h1:plVu/MNDcoGbX++P0Dhv8gTtpafG98HqG6BfNj+dfE0= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 h1:ZadFXdmkBFJz3GYPAF20IvtNSHbcRFoLrhCU/LKS9oQ= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5/go.mod h1:mRKPMPyJhg1RBjxtRTL2gHvRhTcZ+nk2Upu/u97Y16M= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7 h1:9wh1G+WbXwPVqf0cfSRSgwIcaXTQgvYezylEAfwmrbw= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7/go.mod h1:yaDOAZF6MNB+NGYpxGCUc+owIdKrjvFW0JODdTcQ3V0= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a h1:AVYA3UTkn2wjdpkTRhtXH0XgVBE25tXmfqxmEZhE+4s= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d h1:86gp4tIXRb6ccSrjcm4gV8iA5wJN6er3rJY9f2UxRLU= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae h1:BmqiIDbA9FB/uOCOHi/shgL7P0XmjFxhfRtJHdKPLE4= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae/go.mod h1:2MggrMtbhqr0u4U2pcYa21lvAtvaeSawjxdIy1ytHWE= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 h1:uSHuru/VuNLKTUOsN7R6UkweI8GAVP8VJMsWljzaDvY= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0/go.mod h1:U4vWLp0dTmYgiN3Y7BXasDfM8NF3ZTIhDo5NjM+7RhQ= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 h1:Q0tHb2GVGo7t/kKh0SiPXeXndDk2inbPlYyzQgCQIMo= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9/go.mod h1:GlSY0cLuXOdaZP8+7pQTezPUwJBW+ExMb5CGby4GGSU= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a h1:IYEy2gpMQRxO3HfuxEBIrfTFiMYTPt/6qhItUnnfIyc= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a/go.mod h1:LBBGlJSsxbMV71NJY79TeRZ0oZDFLB45h5pjGVnCjJ0= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 h1:8u9xUrC+yHrTDexOKDd+jrA6LCzFFHeX1G82oj2fsSI= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135/go.mod h1:NkvE4iQgiT7dMCP6U3xPELHhWhN5Xr6rHC0axRebyMU= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 h1:cy6V45uUMh/Ri28QR3wIcdLETcYQEAo06F7Dh40O5BA= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 h1:OpFlG2f+LXsDp3cejSQju2rmoNsxBlhgrwXMIsk72IA= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0/go.mod h1:X+a4k2a+2G2/yeAaRQMCTLmlhNdQYAeN6v+ZpLzRZww= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 h1:WLgEB8/lIfA1vI+7O4RE/PYitO57TRkKUqVllDIgJD4= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 h1:WRwVcv2IW59subaJDNl6B+N4OkZiAO7U2e9001XSw7c= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2/go.mod h1:+pRGfDej1r7cHMs1dYmuyPuOZzYB9Q+PKu0FvZOYlmw= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e h1:LRT+PltY99+hxZAJn+4nyTfqGVNEM1S6FJ675B9BtJo= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e/go.mod h1:jo+cUqNcHwN8IF7SInQNXDZ8qzBsyMpnLdYbDswviFc= github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a h1:O28vgyHM7QF1YLg1BwkQSIbOYA+t0RiH9+b+k90GPG8= diff --git a/system-tests/lib/go.mod b/system-tests/lib/go.mod index 19681c55cb4..d221bbdf9aa 100644 --- a/system-tests/lib/go.mod +++ b/system-tests/lib/go.mod @@ -20,10 +20,10 @@ require ( github.com/rs/zerolog v1.33.0 github.com/scylladb/go-reflectx v1.0.1 github.com/smartcontractkit/chain-selectors v1.0.60 - github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d - github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a + github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 + github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 - github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 + github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a github.com/smartcontractkit/chainlink-protos/job-distributor v0.12.0 github.com/smartcontractkit/chainlink-testing-framework/framework v0.9.3 github.com/smartcontractkit/chainlink-testing-framework/lib v1.54.3 @@ -363,8 +363,8 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect - github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 // indirect - github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 // indirect + github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 // indirect + github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 // indirect github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e // indirect github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a // indirect github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250612182447-1c32d2efe48f // indirect diff --git a/system-tests/lib/go.sum b/system-tests/lib/go.sum index 1794a3ee1ad..c0e9e90ac3e 100644 --- a/system-tests/lib/go.sum +++ b/system-tests/lib/go.sum @@ -1246,24 +1246,24 @@ github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 h1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097/go.mod h1:Yw7X+vtR7A9MBI+q5b0k/H2PlKy6cQOa7vAp4cshz2s= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed h1:rjtXQLTCLa/+AmMwMTP5WwJUdPBeBAF3Ivwc1GXetBw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed/go.mod h1:k3/Z6AvwurPUlfuDFEonRbkkiTSgNSrtVNhJEWNlUZA= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d h1:BS3gBU0+8C8HzLFNczE1ZI2E8pDYaXXlgAlBE0w7p0w= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d/go.mod h1:plVu/MNDcoGbX++P0Dhv8gTtpafG98HqG6BfNj+dfE0= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 h1:ZadFXdmkBFJz3GYPAF20IvtNSHbcRFoLrhCU/LKS9oQ= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5/go.mod h1:mRKPMPyJhg1RBjxtRTL2gHvRhTcZ+nk2Upu/u97Y16M= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7 h1:9wh1G+WbXwPVqf0cfSRSgwIcaXTQgvYezylEAfwmrbw= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7/go.mod h1:yaDOAZF6MNB+NGYpxGCUc+owIdKrjvFW0JODdTcQ3V0= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a h1:AVYA3UTkn2wjdpkTRhtXH0XgVBE25tXmfqxmEZhE+4s= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d h1:86gp4tIXRb6ccSrjcm4gV8iA5wJN6er3rJY9f2UxRLU= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae h1:BmqiIDbA9FB/uOCOHi/shgL7P0XmjFxhfRtJHdKPLE4= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae/go.mod h1:2MggrMtbhqr0u4U2pcYa21lvAtvaeSawjxdIy1ytHWE= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 h1:uSHuru/VuNLKTUOsN7R6UkweI8GAVP8VJMsWljzaDvY= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0/go.mod h1:U4vWLp0dTmYgiN3Y7BXasDfM8NF3ZTIhDo5NjM+7RhQ= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 h1:Q0tHb2GVGo7t/kKh0SiPXeXndDk2inbPlYyzQgCQIMo= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9/go.mod h1:GlSY0cLuXOdaZP8+7pQTezPUwJBW+ExMb5CGby4GGSU= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a h1:IYEy2gpMQRxO3HfuxEBIrfTFiMYTPt/6qhItUnnfIyc= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a/go.mod h1:LBBGlJSsxbMV71NJY79TeRZ0oZDFLB45h5pjGVnCjJ0= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 h1:8u9xUrC+yHrTDexOKDd+jrA6LCzFFHeX1G82oj2fsSI= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135/go.mod h1:NkvE4iQgiT7dMCP6U3xPELHhWhN5Xr6rHC0axRebyMU= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 h1:cy6V45uUMh/Ri28QR3wIcdLETcYQEAo06F7Dh40O5BA= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 h1:OpFlG2f+LXsDp3cejSQju2rmoNsxBlhgrwXMIsk72IA= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0/go.mod h1:X+a4k2a+2G2/yeAaRQMCTLmlhNdQYAeN6v+ZpLzRZww= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 h1:WLgEB8/lIfA1vI+7O4RE/PYitO57TRkKUqVllDIgJD4= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 h1:WRwVcv2IW59subaJDNl6B+N4OkZiAO7U2e9001XSw7c= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2/go.mod h1:+pRGfDej1r7cHMs1dYmuyPuOZzYB9Q+PKu0FvZOYlmw= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e h1:LRT+PltY99+hxZAJn+4nyTfqGVNEM1S6FJ675B9BtJo= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e/go.mod h1:jo+cUqNcHwN8IF7SInQNXDZ8qzBsyMpnLdYbDswviFc= github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a h1:O28vgyHM7QF1YLg1BwkQSIbOYA+t0RiH9+b+k90GPG8= diff --git a/system-tests/tests/go.mod b/system-tests/tests/go.mod index 42057b054ab..ed4b864a477 100644 --- a/system-tests/tests/go.mod +++ b/system-tests/tests/go.mod @@ -22,11 +22,11 @@ require ( github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.33.0 github.com/shopspring/decimal v1.4.0 - github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d - github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a + github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 + github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 - github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 + github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a github.com/smartcontractkit/chainlink-protos/job-distributor v0.12.0 github.com/smartcontractkit/chainlink-testing-framework/framework v0.9.3 github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.7 @@ -437,8 +437,8 @@ require ( github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed // indirect github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect - github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 // indirect - github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 // indirect + github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 // indirect + github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 // indirect github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e // indirect github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a // indirect github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20250612182447-1c32d2efe48f // indirect diff --git a/system-tests/tests/go.sum b/system-tests/tests/go.sum index a5c3db17a9e..f20bbc567b4 100644 --- a/system-tests/tests/go.sum +++ b/system-tests/tests/go.sum @@ -1440,24 +1440,24 @@ github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097 h1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20250627133416-1d85eec09097/go.mod h1:Yw7X+vtR7A9MBI+q5b0k/H2PlKy6cQOa7vAp4cshz2s= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed h1:rjtXQLTCLa/+AmMwMTP5WwJUdPBeBAF3Ivwc1GXetBw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250609091505-5c8cd74b92ed/go.mod h1:k3/Z6AvwurPUlfuDFEonRbkkiTSgNSrtVNhJEWNlUZA= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d h1:BS3gBU0+8C8HzLFNczE1ZI2E8pDYaXXlgAlBE0w7p0w= -github.com/smartcontractkit/chainlink-common v0.7.1-0.20250626141212-e50b2e7ffe2d/go.mod h1:plVu/MNDcoGbX++P0Dhv8gTtpafG98HqG6BfNj+dfE0= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5 h1:ZadFXdmkBFJz3GYPAF20IvtNSHbcRFoLrhCU/LKS9oQ= +github.com/smartcontractkit/chainlink-common v0.7.1-0.20250627002929-2cbb7418aaa5/go.mod h1:mRKPMPyJhg1RBjxtRTL2gHvRhTcZ+nk2Upu/u97Y16M= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7 h1:9wh1G+WbXwPVqf0cfSRSgwIcaXTQgvYezylEAfwmrbw= github.com/smartcontractkit/chainlink-common/pkg/monitoring v0.0.0-20250415235644-8703639403c7/go.mod h1:yaDOAZF6MNB+NGYpxGCUc+owIdKrjvFW0JODdTcQ3V0= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a h1:AVYA3UTkn2wjdpkTRhtXH0XgVBE25tXmfqxmEZhE+4s= -github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250624161023-93f383781b0a/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d h1:86gp4tIXRb6ccSrjcm4gV8iA5wJN6er3rJY9f2UxRLU= +github.com/smartcontractkit/chainlink-common/pkg/values v0.0.0-20250626141212-e50b2e7ffe2d/go.mod h1:QUEPHdSkH19Or+E1iMGG+rDQ6jpCTIbm//9Osa6MXDE= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae h1:BmqiIDbA9FB/uOCOHi/shgL7P0XmjFxhfRtJHdKPLE4= github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20250604171706-a98fa6515eae/go.mod h1:2MggrMtbhqr0u4U2pcYa21lvAtvaeSawjxdIy1ytHWE= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0 h1:uSHuru/VuNLKTUOsN7R6UkweI8GAVP8VJMsWljzaDvY= github.com/smartcontractkit/chainlink-deployments-framework v0.15.0/go.mod h1:U4vWLp0dTmYgiN3Y7BXasDfM8NF3ZTIhDo5NjM+7RhQ= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9 h1:Q0tHb2GVGo7t/kKh0SiPXeXndDk2inbPlYyzQgCQIMo= -github.com/smartcontractkit/chainlink-evm v0.0.0-20250625151958-31b61ac8e1d9/go.mod h1:GlSY0cLuXOdaZP8+7pQTezPUwJBW+ExMb5CGby4GGSU= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a h1:IYEy2gpMQRxO3HfuxEBIrfTFiMYTPt/6qhItUnnfIyc= +github.com/smartcontractkit/chainlink-evm v0.0.0-20250627135735-93e3b09aec5a/go.mod h1:LBBGlJSsxbMV71NJY79TeRZ0oZDFLB45h5pjGVnCjJ0= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 h1:8u9xUrC+yHrTDexOKDd+jrA6LCzFFHeX1G82oj2fsSI= github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135/go.mod h1:NkvE4iQgiT7dMCP6U3xPELHhWhN5Xr6rHC0axRebyMU= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1 h1:cy6V45uUMh/Ri28QR3wIcdLETcYQEAo06F7Dh40O5BA= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250623155929-df514c92ffe1/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0 h1:OpFlG2f+LXsDp3cejSQju2rmoNsxBlhgrwXMIsk72IA= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250616180023-87b70c08d7c0/go.mod h1:X+a4k2a+2G2/yeAaRQMCTLmlhNdQYAeN6v+ZpLzRZww= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502 h1:WLgEB8/lIfA1vI+7O4RE/PYitO57TRkKUqVllDIgJD4= +github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20250618164021-9b34289a9502/go.mod h1:Kb8f+wt2YmBdD0PfbsC9bDhdUG/Y8sqUkzAvC2Dn8/M= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2 h1:WRwVcv2IW59subaJDNl6B+N4OkZiAO7U2e9001XSw7c= +github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20250627121608-e7b52913fae2/go.mod h1:+pRGfDej1r7cHMs1dYmuyPuOZzYB9Q+PKu0FvZOYlmw= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e h1:LRT+PltY99+hxZAJn+4nyTfqGVNEM1S6FJ675B9BtJo= github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20250618135814-7e3f79ab707e/go.mod h1:jo+cUqNcHwN8IF7SInQNXDZ8qzBsyMpnLdYbDswviFc= github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20250522110034-65c54665034a h1:O28vgyHM7QF1YLg1BwkQSIbOYA+t0RiH9+b+k90GPG8= diff --git a/testdata/scripts/node/validate/defaults-override.txtar b/testdata/scripts/node/validate/defaults-override.txtar index 03bed1b1253..7131af90c69 100644 --- a/testdata/scripts/node/validate/defaults-override.txtar +++ b/testdata/scripts/node/validate/defaults-override.txtar @@ -431,6 +431,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar index 83e43c1797b..7f46daff790 100644 --- a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar @@ -414,6 +414,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar index ca2efc695f1..561bad58fa7 100644 --- a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar +++ b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar @@ -414,6 +414,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/testdata/scripts/node/validate/disk-based-logging.txtar b/testdata/scripts/node/validate/disk-based-logging.txtar index 23385515642..513a389962c 100644 --- a/testdata/scripts/node/validate/disk-based-logging.txtar +++ b/testdata/scripts/node/validate/disk-based-logging.txtar @@ -414,6 +414,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/testdata/scripts/node/validate/fallback-override.txtar b/testdata/scripts/node/validate/fallback-override.txtar index cec389af039..ca8192b8837 100644 --- a/testdata/scripts/node/validate/fallback-override.txtar +++ b/testdata/scripts/node/validate/fallback-override.txtar @@ -37,6 +37,7 @@ MaxQueued = 250 ReaperInterval = '1h' ReaperThreshold = '168h' ResendAfterThreshold = '1m' +ConfirmationTimeout = '5m0s' [Transactions.AutoPurge] Enabled = false @@ -510,6 +511,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/testdata/scripts/node/validate/invalid.txtar b/testdata/scripts/node/validate/invalid.txtar index 942bd899b20..46684a637d5 100644 --- a/testdata/scripts/node/validate/invalid.txtar +++ b/testdata/scripts/node/validate/invalid.txtar @@ -404,6 +404,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [EVM.Transactions.AutoPurge] Enabled = false diff --git a/testdata/scripts/node/validate/valid.txtar b/testdata/scripts/node/validate/valid.txtar index aaba1964eff..9c3b27bc7cf 100644 --- a/testdata/scripts/node/validate/valid.txtar +++ b/testdata/scripts/node/validate/valid.txtar @@ -411,6 +411,7 @@ MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' +ConfirmationTimeout = '5m0s' [EVM.Transactions.AutoPurge] Enabled = false