diff --git a/contracts/src/v0.8/ccip/test/helpers/CCIPReaderTester.sol b/contracts/src/v0.8/ccip/test/helpers/CCIPReaderTester.sol index 6f9946ab9b..892bc0b1de 100644 --- a/contracts/src/v0.8/ccip/test/helpers/CCIPReaderTester.sol +++ b/contracts/src/v0.8/ccip/test/helpers/CCIPReaderTester.sol @@ -8,6 +8,19 @@ contract CCIPReaderTester { bytes onRamp; } + struct EVM2AnyRampMessage { + RampMessageHeader header; + address sender; + } + + struct RampMessageHeader { + bytes32 messageId; + uint64 sourceChainSelector; + uint64 destChainSelector; + uint64 sequenceNumber; + uint64 nonce; + } + mapping(uint64 sourceChainSelector => SourceChainConfig sourceChainConfig) internal s_sourceChainConfigs; function getSourceChainConfig(uint64 sourceChainSelector) external view returns (SourceChainConfig memory) { @@ -17,4 +30,10 @@ contract CCIPReaderTester { function setSourceChainConfig(uint64 sourceChainSelector, SourceChainConfig memory sourceChainConfig) external { s_sourceChainConfigs[sourceChainSelector] = sourceChainConfig; } + + event CCIPSendRequested(uint64 indexed destChainSelector, EVM2AnyRampMessage message); + + function EmitCCIPSendRequested(uint64 destChainSelector, EVM2AnyRampMessage memory message) external { + emit CCIPSendRequested(destChainSelector, message); + } } diff --git a/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go b/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go index 91d4734afd..bacb985805 100644 --- a/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go +++ b/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go @@ -5,6 +5,7 @@ package ccip_reader_tester import ( "errors" + "fmt" "math/big" "strings" @@ -14,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" ) var ( @@ -28,6 +30,19 @@ var ( _ = abi.ConvertType ) +type CCIPReaderTesterEVM2AnyRampMessage struct { + Header CCIPReaderTesterRampMessageHeader + Sender common.Address +} + +type CCIPReaderTesterRampMessageHeader struct { + MessageId [32]byte + SourceChainSelector uint64 + DestChainSelector uint64 + SequenceNumber uint64 + Nonce uint64 +} + type CCIPReaderTesterSourceChainConfig struct { IsEnabled bool MinSeqNr uint64 @@ -35,8 +50,8 @@ type CCIPReaderTesterSourceChainConfig struct { } var CCIPReaderTesterMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPReaderTester.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPReaderTester.SourceChainConfig\",\"name\":\"sourceChainConfig\",\"type\":\"tuple\"}],\"name\":\"setSourceChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610667806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063e9d68a8e1461003b578063f831af8114610064575b600080fd5b61004e610049366004610222565b610079565b60405161005b9190610244565b60405180910390f35b610077610072366004610381565b61016a565b005b60408051606080820183526000808352602080840182905283850183905267ffffffffffffffff86811683528282529185902085519384018652805460ff8116151585526101009004909216908301526001810180549394929391928401916100e19061049c565b80601f016020809104026020016040519081016040528092919081815260200182805461010d9061049c565b801561015a5780601f1061012f5761010080835404028352916020019161015a565b820191906000526020600020905b81548152906001019060200180831161013d57829003601f168201915b5050505050815250509050919050565b67ffffffffffffffff8281166000908152602081815260409182902084518154928601517fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009093169015157fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1617610100929094169190910292909217825582015182919060018201906101fe9082610540565b5050505050565b803567ffffffffffffffff8116811461021d57600080fd5b919050565b60006020828403121561023457600080fd5b61023d82610205565b9392505050565b6000602080835283511515602084015267ffffffffffffffff60208501511660408401526040840151606080850152805180608086015260005b8181101561029a5782810184015186820160a00152830161027e565b50600060a0828701015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116860101935050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561032c5761032c6102da565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610379576103796102da565b604052919050565b6000806040838503121561039457600080fd5b61039d83610205565b915060208084013567ffffffffffffffff808211156103bb57600080fd5b90850190606082880312156103cf57600080fd5b6103d7610309565b823580151581146103e757600080fd5b81526103f4838501610205565b8482015260408301358281111561040a57600080fd5b80840193505087601f84011261041f57600080fd5b823582811115610431576104316102da565b610461857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610332565b9250808352888582860101111561047757600080fd5b8085850186850137600085828501015250816040820152809450505050509250929050565b600181811c908216806104b057607f821691505b6020821081036104e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561053b576000816000526020600020601f850160051c810160208610156105185750805b601f850160051c820191505b8181101561053757828155600101610524565b5050505b505050565b815167ffffffffffffffff81111561055a5761055a6102da565b61056e81610568845461049c565b846104ef565b602080601f8311600181146105c1576000841561058b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610537565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561060e578886015182559484019460019091019084016105ef565b508582101561064a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000818000a", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structCCIPReaderTester.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structCCIPReaderTester.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structCCIPReaderTester.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"internalType\":\"structCCIPReaderTester.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"EmitCCIPSendRequested\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPReaderTester.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPReaderTester.SourceChainConfig\",\"name\":\"sourceChainConfig\",\"type\":\"tuple\"}],\"name\":\"setSourceChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610871806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063e9d68a8e14610046578063f2c2a53b1461006f578063f831af8114610084575b600080fd5b6100596100543660046102e8565b610097565b604051610066919061030a565b60405180910390f35b61008261007d3660046104b1565b610188565b005b61008261009236600461058b565b610230565b60408051606080820183526000808352602080840182905283850183905267ffffffffffffffff86811683528282529185902085519384018652805460ff8116151585526101009004909216908301526001810180549394929391928401916100ff906106a6565b80601f016020809104026020016040519081016040528092919081815260200182805461012b906106a6565b80156101785780601f1061014d57610100808354040283529160200191610178565b820191906000526020600020905b81548152906001019060200180831161015b57829003601f168201915b5050505050815250509050919050565b8167ffffffffffffffff167f44f1faa7d73ff2ac41c8e2f4cf1566d41e2599c1a51d7d862d00410f3810850182604051610224919081518051825260208082015167ffffffffffffffff9081168285015260408084015182169085015260608084015182169085015260809283015116918301919091529091015173ffffffffffffffffffffffffffffffffffffffff1660a082015260c00190565b60405180910390a25050565b67ffffffffffffffff8281166000908152602081815260409182902084518154928601517fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009093169015157fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1617610100929094169190910292909217825582015182919060018201906102c4908261074a565b5050505050565b803567ffffffffffffffff811681146102e357600080fd5b919050565b6000602082840312156102fa57600080fd5b610303826102cb565b9392505050565b6000602080835283511515602084015267ffffffffffffffff60208501511660408401526040840151606080850152805180608086015260005b818110156103605782810184015186820160a001528301610344565b50600060a0828701015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116860101935050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156103f2576103f26103a0565b60405290565b60405160a0810167ffffffffffffffff811182821017156103f2576103f26103a0565b6040516060810167ffffffffffffffff811182821017156103f2576103f26103a0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610485576104856103a0565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146102e357600080fd5b60008082840360e08112156104c557600080fd5b6104ce846102cb565b92507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160c081121561050057600080fd5b6105086103cf565b60a082121561051657600080fd5b61051e6103f8565b915060208501358252610533604086016102cb565b6020830152610544606086016102cb565b6040830152610555608086016102cb565b606083015261056660a086016102cb565b608083015281815261057a60c0860161048d565b602082015280925050509250929050565b6000806040838503121561059e57600080fd5b6105a7836102cb565b915060208084013567ffffffffffffffff808211156105c557600080fd5b90850190606082880312156105d957600080fd5b6105e161041b565b823580151581146105f157600080fd5b81526105fe8385016102cb565b8482015260408301358281111561061457600080fd5b80840193505087601f84011261062957600080fd5b82358281111561063b5761063b6103a0565b61066b857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161043e565b9250808352888582860101111561068157600080fd5b8085850186850137600085828501015250816040820152809450505050509250929050565b600181811c908216806106ba57607f821691505b6020821081036106f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610745576000816000526020600020601f850160051c810160208610156107225750805b601f850160051c820191505b818110156107415782815560010161072e565b5050505b505050565b815167ffffffffffffffff811115610764576107646103a0565b6107788161077284546106a6565b846106f9565b602080601f8311600181146107cb57600084156107955750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610741565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015610818578886015182559484019460019091019084016107f9565b508582101561085457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000818000a", } var CCIPReaderTesterABI = CCIPReaderTesterMetaData.ABI @@ -197,6 +212,18 @@ func (_CCIPReaderTester *CCIPReaderTesterCallerSession) GetSourceChainConfig(sou return _CCIPReaderTester.Contract.GetSourceChainConfig(&_CCIPReaderTester.CallOpts, sourceChainSelector) } +func (_CCIPReaderTester *CCIPReaderTesterTransactor) EmitCCIPSendRequested(opts *bind.TransactOpts, destChainSelector uint64, message CCIPReaderTesterEVM2AnyRampMessage) (*types.Transaction, error) { + return _CCIPReaderTester.contract.Transact(opts, "EmitCCIPSendRequested", destChainSelector, message) +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) EmitCCIPSendRequested(destChainSelector uint64, message CCIPReaderTesterEVM2AnyRampMessage) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.EmitCCIPSendRequested(&_CCIPReaderTester.TransactOpts, destChainSelector, message) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) EmitCCIPSendRequested(destChainSelector uint64, message CCIPReaderTesterEVM2AnyRampMessage) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.EmitCCIPSendRequested(&_CCIPReaderTester.TransactOpts, destChainSelector, message) +} + func (_CCIPReaderTester *CCIPReaderTesterTransactor) SetSourceChainConfig(opts *bind.TransactOpts, sourceChainSelector uint64, sourceChainConfig CCIPReaderTesterSourceChainConfig) (*types.Transaction, error) { return _CCIPReaderTester.contract.Transact(opts, "setSourceChainConfig", sourceChainSelector, sourceChainConfig) } @@ -209,6 +236,148 @@ func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) SetSourceChainConfig return _CCIPReaderTester.Contract.SetSourceChainConfig(&_CCIPReaderTester.TransactOpts, sourceChainSelector, sourceChainConfig) } +type CCIPReaderTesterCCIPSendRequestedIterator struct { + Event *CCIPReaderTesterCCIPSendRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReaderTesterCCIPSendRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReaderTesterCCIPSendRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPReaderTesterCCIPSendRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPReaderTesterCCIPSendRequestedIterator) Error() error { + return it.fail +} + +func (it *CCIPReaderTesterCCIPSendRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReaderTesterCCIPSendRequested struct { + DestChainSelector uint64 + Message CCIPReaderTesterEVM2AnyRampMessage + Raw types.Log +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) FilterCCIPSendRequested(opts *bind.FilterOpts, destChainSelector []uint64) (*CCIPReaderTesterCCIPSendRequestedIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _CCIPReaderTester.contract.FilterLogs(opts, "CCIPSendRequested", destChainSelectorRule) + if err != nil { + return nil, err + } + return &CCIPReaderTesterCCIPSendRequestedIterator{contract: _CCIPReaderTester.contract, event: "CCIPSendRequested", logs: logs, sub: sub}, nil +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) WatchCCIPSendRequested(opts *bind.WatchOpts, sink chan<- *CCIPReaderTesterCCIPSendRequested, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _CCIPReaderTester.contract.WatchLogs(opts, "CCIPSendRequested", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReaderTesterCCIPSendRequested) + if err := _CCIPReaderTester.contract.UnpackLog(event, "CCIPSendRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) ParseCCIPSendRequested(log types.Log) (*CCIPReaderTesterCCIPSendRequested, error) { + event := new(CCIPReaderTesterCCIPSendRequested) + if err := _CCIPReaderTester.contract.UnpackLog(event, "CCIPSendRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_CCIPReaderTester *CCIPReaderTester) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _CCIPReaderTester.abi.Events["CCIPSendRequested"].ID: + return _CCIPReaderTester.ParseCCIPSendRequested(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (CCIPReaderTesterCCIPSendRequested) Topic() common.Hash { + return common.HexToHash("0x44f1faa7d73ff2ac41c8e2f4cf1566d41e2599c1a51d7d862d00410f38108501") +} + func (_CCIPReaderTester *CCIPReaderTester) Address() common.Address { return _CCIPReaderTester.address } @@ -216,7 +385,17 @@ func (_CCIPReaderTester *CCIPReaderTester) Address() common.Address { type CCIPReaderTesterInterface interface { GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (CCIPReaderTesterSourceChainConfig, error) + EmitCCIPSendRequested(opts *bind.TransactOpts, destChainSelector uint64, message CCIPReaderTesterEVM2AnyRampMessage) (*types.Transaction, error) + SetSourceChainConfig(opts *bind.TransactOpts, sourceChainSelector uint64, sourceChainConfig CCIPReaderTesterSourceChainConfig) (*types.Transaction, error) + FilterCCIPSendRequested(opts *bind.FilterOpts, destChainSelector []uint64) (*CCIPReaderTesterCCIPSendRequestedIterator, error) + + WatchCCIPSendRequested(opts *bind.WatchOpts, sink chan<- *CCIPReaderTesterCCIPSendRequested, destChainSelector []uint64) (event.Subscription, error) + + ParseCCIPSendRequested(log types.Log) (*CCIPReaderTesterCCIPSendRequested, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + Address() common.Address } diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 03f7167fcf..b190c0654b 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -7,7 +7,7 @@ burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoo burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 6f40135e1488097eafa843839a719fe9a3c21354565b64eb377a24a0a55782ef ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin c06c1cf1d004a803585a2c9d7a71ee5997b5fca86c2e111335cb8b930d9e3b5a ccip_reader_test: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 645c8a3a3495fb39a2a2b0abc3c9ceee9df731a45e0fd4e0ae907afe182a9c55 -ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 645c8a3a3495fb39a2a2b0abc3c9ceee9df731a45e0fd4e0ae907afe182a9c55 +ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 6c143505c48498f5c6748c9b7749c549cdbb86b1ca5a87a32f017b2e6aa835b4 commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin ddc26c10c2a52b59624faae9005827b09b98db4566887a736005e8cc37cf8a51 commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin ebd8aac686fa28a71d4212bcd25a28f8f640d50dce5e50498b2f6b8534890b69 ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de diff --git a/core/services/ocr3/plugins/ccip_integration_tests/ccipreader/ccipreader_test.go b/core/services/ocr3/plugins/ccip_integration_tests/ccipreader/ccipreader_test.go index 35a2489c7d..2f2d61d246 100644 --- a/core/services/ocr3/plugins/ccip_integration_tests/ccipreader/ccipreader_test.go +++ b/core/services/ocr3/plugins/ccip_integration_tests/ccipreader/ccipreader_test.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/smartcontractkit/chainlink-ccip/pkg/crconsts" ccipreaderpkg "github.com/smartcontractkit/chainlink-ccip/pkg/reader" @@ -31,7 +32,80 @@ func TestCCIPReader_CommitReportsGTETimestamp(t *testing.T) {} func TestCCIPReader_ExecutedMessageRanges(t *testing.T) {} -func TestCCIPReader_MsgsBetweenSeqNums(t *testing.T) {} +func TestCCIPReader_MsgsBetweenSeqNums(t *testing.T) { + lggr := logger.TestLogger(t) + ctx := context.Background() + const chainS1 = cciptypes.ChainSelector(1) + const chainD = cciptypes.ChainSelector(2) + s := testSetup(t, ctx, chainS1, nil) + + cfg := evmtypes.ChainReaderConfig{ + Contracts: map[string]evmtypes.ChainContractReader{ + crconsts.ContractNameOnRamp: { + ContractPollingFilter: evmtypes.ContractPollingFilter{ + GenericEventNames: []string{crconsts.EventNameCCIPSendRequested}, + }, + ContractABI: ccip_reader_tester.CCIPReaderTesterABI, + Configs: map[string]*evmtypes.ChainReaderDefinition{ + crconsts.EventNameCCIPSendRequested: { + ChainSpecificName: crconsts.EventNameCCIPSendRequested, + ReadType: evmtypes.Event, + }, + }, + }, + }, + } + + cr, err := evm.NewChainReaderService(ctx, lggr, s.lp, s.cl, cfg) + assert.NoError(t, err) + err = cr.Bind(ctx, []types.BoundContract{ + { + Address: s.contractAddr.String(), + Name: crconsts.ContractNameOnRamp, + Pending: false, + }, + }) + assert.NoError(t, err) + err = cr.Start(ctx) + assert.NoError(t, err) + + contractReaders := map[cciptypes.ChainSelector]types.ContractReader{chainS1: cr} + contractWriters := make(map[cciptypes.ChainSelector]types.ChainWriter) + reader := ccipreaderpkg.NewCCIPReader(lggr, contractReaders, contractWriters, chainD) + + _, err = s.contract.EmitCCIPSendRequested(s.auth, uint64(chainD), ccip_reader_tester.CCIPReaderTesterEVM2AnyRampMessage{ + Header: ccip_reader_tester.CCIPReaderTesterRampMessageHeader{ + MessageId: [32]byte{1, 0, 0, 0, 0}, + SourceChainSelector: uint64(chainS1), + DestChainSelector: uint64(chainD), + SequenceNumber: 10, + }, + Sender: common.Address{}, + }) + assert.NoError(t, err) + + _, err = s.contract.EmitCCIPSendRequested(s.auth, uint64(chainD), ccip_reader_tester.CCIPReaderTesterEVM2AnyRampMessage{ + Header: ccip_reader_tester.CCIPReaderTesterRampMessageHeader{ + MessageId: [32]byte{1, 0, 0, 0, 1}, + SourceChainSelector: uint64(chainS1), + DestChainSelector: uint64(chainD), + SequenceNumber: 15, + }, + Sender: common.Address{}, + }) + assert.NoError(t, err) + + s.sb.Commit() + time.Sleep(5 * time.Second) + + msgs, err := reader.MsgsBetweenSeqNums( + ctx, + chainS1, + cciptypes.NewSeqNumRange(5, 20), + ) + require.NoError(t, err) + assert.Len(t, msgs, 2) +} func TestCCIPReader_NextSeqNum(t *testing.T) { lggr := logger.TestLogger(t) @@ -93,7 +167,7 @@ func TestCCIPReader_GasPrices(t *testing.T) {} func TestCCIPReader_Sync(t *testing.T) {} -func testSetup(t *testing.T, ctx context.Context, destChain cciptypes.ChainSelector, onChainSeqNums map[cciptypes.ChainSelector]cciptypes.SeqNum) *testSetupData { +func testSetup(t *testing.T, ctx context.Context, readerChain cciptypes.ChainSelector, onChainSeqNums map[cciptypes.ChainSelector]cciptypes.SeqNum) *testSetupData { const chainID = 1337 // Generate a new key pair for the simulated account @@ -128,9 +202,9 @@ func testSetup(t *testing.T, ctx context.Context, destChain cciptypes.ChainSelec RpcBatchSize: 10, KeepFinalizedBlocksDepth: 100000, } - cl := client.NewSimulatedBackendClient(t, simulatedBackend, big.NewInt(0).SetUint64(uint64(destChain))) + cl := client.NewSimulatedBackendClient(t, simulatedBackend, big.NewInt(0).SetUint64(uint64(readerChain))) headTracker := headtracker.NewSimulatedHeadTracker(cl, lpOpts.UseFinalityTag, lpOpts.FinalityDepth) - lp := logpoller.NewLogPoller(logpoller.NewORM(big.NewInt(0).SetUint64(uint64(destChain)), db, lggr), + lp := logpoller.NewLogPoller(logpoller.NewORM(big.NewInt(0).SetUint64(uint64(readerChain)), db, lggr), cl, lggr, headTracker, diff --git a/go.mod b/go.mod index 48de19de00..00047d5ab7 100644 --- a/go.mod +++ b/go.mod @@ -74,7 +74,7 @@ require ( github.com/shopspring/decimal v1.3.1 github.com/smartcontractkit/chain-selectors v1.0.18 github.com/smartcontractkit/chainlink-automation v1.0.4 - github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717091203-29f525cbc121 + github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717130649-4fb144a2e428 github.com/smartcontractkit/chainlink-common v0.1.7-0.20240708180634-24440372521a github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240621143432-85370a54b141 github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240702144807-761f63e7b527 diff --git a/go.sum b/go.sum index 2cca2195f6..14fc399cf7 100644 --- a/go.sum +++ b/go.sum @@ -1065,6 +1065,10 @@ github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717085234-f638775579e8 h1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717085234-f638775579e8/go.mod h1:gyODeD1uMobe5VWRwVRiEXzL9wUzFTI80VvyCNLqWcw= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717091203-29f525cbc121 h1:RjjN+QkVzA0l6RwOJcJxefEAgbf1eUCeQpZrVCZAxQY= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717091203-29f525cbc121/go.mod h1:gyODeD1uMobe5VWRwVRiEXzL9wUzFTI80VvyCNLqWcw= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717122855-94a14f132804 h1:GByFrYOTaZGz8OaVF1RiArNU0mDACjVGJ7qfkw1zWJ4= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717122855-94a14f132804/go.mod h1:gyODeD1uMobe5VWRwVRiEXzL9wUzFTI80VvyCNLqWcw= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717130649-4fb144a2e428 h1:o7U5zMu3uCnShcxZ7wxwUGp/SWCE12zbfBhVyWZvUsI= +github.com/smartcontractkit/chainlink-ccip v0.0.0-20240717130649-4fb144a2e428/go.mod h1:gyODeD1uMobe5VWRwVRiEXzL9wUzFTI80VvyCNLqWcw= github.com/smartcontractkit/chainlink-common v0.1.7-0.20240708180634-24440372521a h1:0HUP3qmHejg7FyFdY+R+8iFg0kNtrvnAxaQ//+fuZfc= github.com/smartcontractkit/chainlink-common v0.1.7-0.20240708180634-24440372521a/go.mod h1:fh9eBbrReCmv31bfz52ENCAMa7nTKQbdhb2B3+S2VGo= github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240621143432-85370a54b141 h1:TMOoYaeSDkkI3jkCH7lKHOZaLkeDuxFTNC+XblD6M0M=