diff --git a/contracts/scripts/native_solc_compile_all_ccip b/contracts/scripts/native_solc_compile_all_ccip index 661de2b842..784425d1bc 100755 --- a/contracts/scripts/native_solc_compile_all_ccip +++ b/contracts/scripts/native_solc_compile_all_ccip @@ -54,9 +54,12 @@ compileContract () { # Contracts should be ordered in reverse-import-complexity-order to minimize overwrite risks. compileContract ccip/offRamp/EVM2EVMOffRamp.sol compileContract ccip/offRamp/EVM2EVMMultiOffRamp.sol -compileContract ccip/applications/PingPongDemo.sol -compileContract ccip/applications/SelfFundedPingPong.sol -compileContract ccip/applications/EtherSenderReceiver.sol +compileContract ccip/applications/internal/PingPongDemo.sol +compileContract ccip/applications/internal/SelfFundedPingPong.sol +compileContract ccip/applications/external/CCIPClient.sol +compileContract ccip/applications/external/CCIPReceiver.sol +compileContract ccip/applications/external/CCIPReceiverWithAck.sol +compileContract ccip/applications/external/CCIPSender.sol compileContract ccip/onRamp/EVM2EVMMultiOnRamp.sol compileContract ccip/onRamp/EVM2EVMOnRamp.sol compileContract ccip/CommitStore.sol @@ -77,6 +80,8 @@ compileContract ccip/tokenAdminRegistry/TokenAdminRegistry.sol compileContract ccip/tokenAdminRegistry/RegistryModuleOwnerCustom.sol compileContract ccip/capability/CCIPCapabilityConfiguration.sol + + # Test helpers compileContract ccip/test/helpers/BurnMintERC677Helper.sol compileContract ccip/test/helpers/CommitStoreHelper.sol diff --git a/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go b/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go new file mode 100644 index 0000000000..44de16fc5c --- /dev/null +++ b/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go @@ -0,0 +1,1941 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ccipClient + +import ( + "errors" + "fmt" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "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 ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type ICCIPClientBaseapprovedSenderUpdate struct { + DestChainSelector uint64 + Sender []byte +} + +var CCIPClientMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CannotAcknowledgeUnsentMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorCase\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFeeTokenAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMagicBytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ACKMESSAGEMAGICBYTES\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"disableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"enableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"s_chains\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"simRevert\",\"type\":\"bool\"}],\"name\":\"setSimRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162004558380380620045588339810160408190526200003491620005c8565b8181818033806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c28162000140565b5050506001600160a01b038116620000ed576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0390811660805260078054610100600160a81b0319166101009285169283021790551590506200013657620001366001600160a01b03821683600019620001eb565b50505050620006c5565b336001600160a01b038216036200019a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b801580620002695750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000267919062000607565b155b620002dd5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000086565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003359185916200033a16565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000389906001600160a01b0385169084906200040b565b805190915015620003355780806020019051810190620003aa919062000621565b620003355760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000086565b60606200041c848460008562000424565b949350505050565b606082471015620004875760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000086565b600080866001600160a01b03168587604051620004a5919062000672565b60006040518083038185875af1925050503d8060008114620004e4576040519150601f19603f3d011682016040523d82523d6000602084013e620004e9565b606091505b509092509050620004fd8783838762000508565b979650505050505050565b606083156200057c57825160000362000574576001600160a01b0385163b620005745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000086565b50816200041c565b6200041c8383815115620005935781518083602001fd5b8060405162461bcd60e51b815260040162000086919062000690565b6001600160a01b0381168114620005c557600080fd5b50565b60008060408385031215620005dc57600080fd5b8251620005e981620005af565b6020840151909250620005fc81620005af565b809150509250929050565b6000602082840312156200061a57600080fd5b5051919050565b6000602082840312156200063457600080fd5b815180151581146200064557600080fd5b9392505050565b60005b83811015620006695781810151838201526020016200064f565b50506000910152565b60008251620006868184602087016200064c565b9190910192915050565b6020815260008251806020840152620006b18160408501602087016200064c565b601f01601f19169190910160400192915050565b608051613e3f620007196000396000818161045c015281816105bf0152818161065d01528181610e1b015281816117f5015281816119c801528181611bde0152818161235b01526124270152613e3f6000f3fe60806040526004361061016c5760003560e01c80636939cd97116100ca578063cf6730f811610079578063effde24011610056578063effde240146104e0578063f2fde38b146104f3578063ff2deec31461051357005b8063cf6730f814610480578063d8469e40146104a0578063e4ca8754146104c057005b806385572ffb116100a757806385572ffb146103e15780638da5cb5b14610401578063b0f479a11461044d57005b80636939cd971461037f57806379ba5097146103ac5780638462a2b9146103c157005b806341eade4611610126578063536c6bfa11610103578063536c6bfa146103115780635dc5ebdb146103315780635e35359e1461035f57005b806341eade46146102a35780635075a9d4146102c357806352f813c3146102f157005b806311e85dff1161015457806311e85dff146101eb578063181f5a771461020b5780633a51b79e1461025a57005b806305bfe982146101755780630e958d6b146101bb57005b3661017357005b005b34801561018157600080fd5b506101a5610190366004612cb5565b60086020526000908152604090205460ff1681565b6040516101b29190612cfd565b60405180910390f35b3480156101c757600080fd5b506101db6101d6366004612d9d565b610545565b60405190151581526020016101b2565b3480156101f757600080fd5b50610173610206366004612e24565b61058f565b34801561021757600080fd5b5060408051808201909152601d81527f4343495052656365697665725769746841434b20312e302e302d64657600000060208201525b6040516101b29190612eaf565b34801561026657600080fd5b5061024d6040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b3480156102af57600080fd5b506101736102be366004612ec2565b61071f565b3480156102cf57600080fd5b506102e36102de366004612cb5565b61075e565b6040519081526020016101b2565b3480156102fd57600080fd5b5061017361030c366004612eed565b610771565b34801561031d57600080fd5b5061017361032c366004612f0a565b6107aa565b34801561033d57600080fd5b5061035161034c366004612ec2565b6107c0565b6040516101b2929190612f36565b34801561036b57600080fd5b5061017361037a366004612f64565b6108ec565b34801561038b57600080fd5b5061039f61039a366004612cb5565b610915565b6040516101b29190613002565b3480156103b857600080fd5b50610173610b20565b3480156103cd57600080fd5b506101736103dc3660046130db565b610c22565b3480156103ed57600080fd5b506101736103fc366004613147565b610e03565b34801561040d57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561045957600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610428565b34801561048c57600080fd5b5061017361049b366004613147565b6110f3565b3480156104ac57600080fd5b506101736104bb366004613182565b611310565b3480156104cc57600080fd5b506101736104db366004612cb5565b611372565b6102e36104ee36600461336b565b6115f0565b3480156104ff57600080fd5b5061017361050e366004612e24565b611ce8565b34801561051f57600080fd5b5060075461042890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff8316600090815260026020819052604080832090519101906105739085908590613489565b9081526040519081900360200190205460ff1690509392505050565b610597611cfc565b600754610100900473ffffffffffffffffffffffffffffffffffffffff1615610604576106047f0000000000000000000000000000000000000000000000000000000000000000600754610100900473ffffffffffffffffffffffffffffffffffffffff16906000611d7f565b6007805473ffffffffffffffffffffffffffffffffffffffff8381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff851617909455929091041690156106c1576106c17f0000000000000000000000000000000000000000000000000000000000000000600754610100900473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611d7f565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b610727611cfc565b67ffffffffffffffff811660009081526002602052604081209061074b8282612c67565b610759600183016000612c67565b505050565b600061076b600483611f7f565b92915050565b610779611cfc565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6107b2611cfc565b6107bc8282611f92565b5050565b6002602052600090815260409020805481906107db90613499565b80601f016020809104026020016040519081016040528092919081815260200182805461080790613499565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b50505050509080600101805461086990613499565b80601f016020809104026020016040519081016040528092919081815260200182805461089590613499565b80156108e25780601f106108b7576101008083540402835291602001916108e2565b820191906000526020600020905b8154815290600101906020018083116108c557829003601f168201915b5050505050905082565b6108f4611cfc565b61075973ffffffffffffffffffffffffffffffffffffffff841683836120ec565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260038152908490208451928301855280548352600181015467ffffffffffffffff169183019190915260028101805493949293919284019161098490613499565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090613499565b80156109fd5780601f106109d2576101008083540402835291602001916109fd565b820191906000526020600020905b8154815290600101906020018083116109e057829003601f168201915b50505050508152602001600382018054610a1690613499565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4290613499565b8015610a8f5780601f10610a6457610100808354040283529160200191610a8f565b820191906000526020600020905b815481529060010190602001808311610a7257829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610b125760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610abd565b505050915250909392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610c2a611cfc565b60005b81811015610d0d5760026000848484818110610c4b57610c4b6134ec565b9050602002810190610c5d919061351b565b610c6b906020810190612ec2565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610ca257610ca26134ec565b9050602002810190610cb4919061351b565b610cc2906020810190613559565b604051610cd0929190613489565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600101610c2d565b5060005b83811015610dfc57600160026000878785818110610d3157610d316134ec565b9050602002810190610d43919061351b565b610d51906020810190612ec2565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610d8857610d886134ec565b9050602002810190610d9a919061351b565b610da8906020810190613559565b604051610db6929190613489565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055600101610d11565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e74576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610b9d565b610e846040820160208301612ec2565b610e916040830183613559565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260026020819052604091829020915191019350610eee92508491506135be565b9081526040519081900360200190205460ff16610f3957806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610b9d9190612eaf565b610f496040840160208501612ec2565b67ffffffffffffffff811660009081526002602052604090208054610f6d90613499565b9050600003610fb4576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610b9d565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890610ff09087906004016136d2565b600060405180830381600087803b15801561100a57600080fd5b505af192505050801561101b575060015b6110c0573d808015611049576040519150601f19603f3d011682016040523d82523d6000602084013e61104e565b606091505b50611060853560015b60049190612142565b5084356000908152600360205260409020859061107d8282613aa4565b50506040518535907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f906110b2908490612eaf565b60405180910390a2506110ed565b6040518435907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b50505050565b33301461112c576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061113b6060830183613559565b8101906111489190613b9e565b905060008160400151600181111561116257611162612cce565b03611170576107bc82612157565b60018160400151600181111561118857611188612cce565b036107bc5760008082602001518060200190518101906111a89190613c4a565b60408051808201909152601581527f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000060209182015282519083012091935091507f1c778f21871bcc06cfebd177c4d0360c2f3550962fb071f69ed007e4f55f23b214611240576040517f9f0b03b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008281526008602052604090205460ff16600281111561126557611265612cce565b1461129f576040517f3ec8770000000000000000000000000000000000000000000000000000000000815260048101829052602401610b9d565b60008181526008602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600217905590518281527fef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79910160405180910390a150505050565b611318611cfc565b67ffffffffffffffff8516600090815260026020526040902061133c848683613828565b508015610dfc5767ffffffffffffffff8516600090815260026020526040902060010161136a828483613828565b505050505050565b61137a611cfc565b6001611387600483611f7f565b146113c1576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610b9d565b6113cc816000611057565b506000818152600360209081526040808320815160a08101835281548152600182015467ffffffffffffffff1693810193909352600281018054919284019161141490613499565b80601f016020809104026020016040519081016040528092919081815260200182805461144090613499565b801561148d5780601f106114625761010080835404028352916020019161148d565b820191906000526020600020905b81548152906001019060200180831161147057829003601f168201915b505050505081526020016003820180546114a690613499565b80601f01602080910402602001604051908101604052809291908181526020018280546114d290613499565b801561151f5780601f106114f45761010080835404028352916020019161151f565b820191906000526020600020905b81548152906001019060200180831161150257829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156115a25760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff16825260019081015482840152908352909201910161154d565b505050508152505090506115b58161250d565b6115c06004836125b3565b5060405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff84166000908152600260205260408120805486919061161790613499565b905060000361165e576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610b9d565b6040805160a08101825267ffffffffffffffff881660009081526002602052918220805482919061168e90613499565b80601f01602080910402602001604051908101604052809291908181526020018280546116ba90613499565b80156117075780601f106116dc57610100808354040283529160200191611707565b820191906000526020600020905b8154815290600101906020018083116116ea57829003601f168201915b505050505081526020018681526020018781526020018573ffffffffffffffffffffffffffffffffffffffff168152602001600260008a67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600101805461176e90613499565b80601f016020809104026020016040519081016040528092919081815260200182805461179a90613499565b80156117e75780601f106117bc576101008083540402835291602001916117e7565b820191906000526020600020905b8154815290600101906020018083116117ca57829003601f168201915b5050505050815250905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166320487ded89846040518363ffffffff1660e01b815260040161184e929190613ccb565b602060405180830381865afa15801561186b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188f9190613d98565b90506000805b8851811015611a505761190533308b84815181106118b5576118b56134ec565b6020026020010151602001518c85815181106118d3576118d36134ec565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166125bf909392919063ffffffff16565b8673ffffffffffffffffffffffffffffffffffffffff1689828151811061192e5761192e6134ec565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16148015611972575073ffffffffffffffffffffffffffffffffffffffff871615155b801561199d575060075473ffffffffffffffffffffffffffffffffffffffff88811661010090920416145b156119c357600191506119be3330858c85815181106118d3576118d36134ec565b611a48565b611a487f00000000000000000000000000000000000000000000000000000000000000008a83815181106119f9576119f96134ec565b6020026020010151602001518b8481518110611a1757611a176134ec565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16611d7f9092919063ffffffff16565b600101611895565b5080158015611a7e575060075473ffffffffffffffffffffffffffffffffffffffff87811661010090920416145b8015611a9f575073ffffffffffffffffffffffffffffffffffffffff861615155b15611b6d576040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829073ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa158015611b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b349190613d98565b108015611b415750333014155b15611b6857611b6873ffffffffffffffffffffffffffffffffffffffff87163330856125bf565b611bc7565b73ffffffffffffffffffffffffffffffffffffffff8616158015611b9057508134105b15611bc7576040517f07da6ee600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116906396f4e9f990881615611c14576000611c16565b835b8b866040518463ffffffff1660e01b8152600401611c35929190613ccb565b60206040518083038185885af1158015611c53573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c789190613d98565b60008181526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a350505050949350505050565b611cf0611cfc565b611cf98161261d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610b9d565b565b801580611e1f57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1d9190613d98565b155b611eab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610b9d565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107599084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612712565b6000611f8b838361281e565b9392505050565b80471015611ffc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b9d565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612056576040519150601f19603f3d011682016040523d82523d6000602084013e61205b565b606091505b5050905080610759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b9d565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107599084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611efd565b600061214f8484846128a8565b949350505050565b6040805160008082526020820190925281612194565b604080518082019091526000808252602082015281526020019060019003908161216d5790505b50905060006040518060a001604052808480604001906121b49190613559565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080518082018252601581527f4d4553534147455f41434b4e4f574c45444745445f00000000000000000000006020828101919091529151928201926122359288359101613db1565b6040516020818303038152906040528152602001838152602001600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600260008660200160208101906122a49190612ec2565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010180546122d490613499565b80601f016020809104026020016040519081016040528092919081815260200182805461230090613499565b801561234d5780601f106123225761010080835404028352916020019161234d565b820191906000526020600020905b81548152906001019060200180831161233057829003601f168201915b5050505050815250905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166320487ded8560200160208101906123a89190612ec2565b846040518363ffffffff1660e01b81526004016123c6929190613ccb565b602060405180830381865afa1580156123e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124079190613d98565b60075490915060009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116916396f4e9f9916101009091041615612462576000612464565b835b6124746040890160208a01612ec2565b866040518463ffffffff1660e01b8152600401612492929190613ccb565b60206040518083038185885af11580156124b0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124d59190613d98565b60405190915081908635907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b237290600090a35050505050565b60005b8160800151518110156107bc57600082608001518281518110612535576125356134ec565b602002602001015160200151905060008360800151838151811061255b5761255b6134ec565b60200260200101516000015190506125a961258b60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff831690846120ec565b5050600101612510565b6000611f8b83836128c5565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110ed9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611efd565b3373ffffffffffffffffffffffffffffffffffffffff82160361269c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610b9d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612774826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128e29092919063ffffffff16565b80519091501561075957808060200190518101906127929190613dd3565b610759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b9d565b600081815260028301602052604081205480151580612842575061284284846128f1565b611f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610b9d565b6000828152600284016020526040812082905561214f84846128fd565b60008181526002830160205260408120819055611f8b8383612909565b606061214f8484600085612915565b6000611f8b8383612a2e565b6000611f8b8383612a46565b6000611f8b8383612a95565b6060824710156129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b9d565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129d091906135be565b60006040518083038185875af1925050503d8060008114612a0d576040519150601f19603f3d011682016040523d82523d6000602084013e612a12565b606091505b5091509150612a2387838387612b88565b979650505050505050565b60008181526001830160205260408120541515611f8b565b6000818152600183016020526040812054612a8d5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561076b565b50600061076b565b60008181526001830160205260408120548015612b7e576000612ab9600183613df0565b8554909150600090612acd90600190613df0565b9050818114612b32576000866000018281548110612aed57612aed6134ec565b9060005260206000200154905080876000018481548110612b1057612b106134ec565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b4357612b43613e03565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061076b565b600091505061076b565b60608315612c1e578251600003612c175773ffffffffffffffffffffffffffffffffffffffff85163b612c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b9d565b508161214f565b61214f8383815115612c335781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d9190612eaf565b508054612c7390613499565b6000825580601f10612c83575050565b601f016020900490600052602060002090810190611cf991905b80821115612cb15760008155600101612c9d565b5090565b600060208284031215612cc757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612d38577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff81168114611cf957600080fd5b60008083601f840112612d6657600080fd5b50813567ffffffffffffffff811115612d7e57600080fd5b602083019150836020828501011115612d9657600080fd5b9250929050565b600080600060408486031215612db257600080fd5b8335612dbd81612d3e565b9250602084013567ffffffffffffffff811115612dd957600080fd5b612de586828701612d54565b9497909650939450505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611cf957600080fd5b8035612e1f81612df2565b919050565b600060208284031215612e3657600080fd5b8135611f8b81612df2565b60005b83811015612e5c578181015183820152602001612e44565b50506000910152565b60008151808452612e7d816020860160208601612e41565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f8b6020830184612e65565b600060208284031215612ed457600080fd5b8135611f8b81612d3e565b8015158114611cf957600080fd5b600060208284031215612eff57600080fd5b8135611f8b81612edf565b60008060408385031215612f1d57600080fd5b8235612f2881612df2565b946020939093013593505050565b604081526000612f496040830185612e65565b8281036020840152612f5b8185612e65565b95945050505050565b600080600060608486031215612f7957600080fd5b8335612f8481612df2565b92506020840135612f9481612df2565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015612ff7578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101612fba565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a0606084015261303c60c0840182612e65565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526130788383612e65565b925060808601519150808584030160a086015250612f5b8282612fa5565b60008083601f8401126130a857600080fd5b50813567ffffffffffffffff8111156130c057600080fd5b6020830191508360208260051b8501011115612d9657600080fd5b600080600080604085870312156130f157600080fd5b843567ffffffffffffffff8082111561310957600080fd5b61311588838901613096565b9096509450602087013591508082111561312e57600080fd5b5061313b87828801613096565b95989497509550505050565b60006020828403121561315957600080fd5b813567ffffffffffffffff81111561317057600080fd5b820160a08185031215611f8b57600080fd5b60008060008060006060868803121561319a57600080fd5b85356131a581612d3e565b9450602086013567ffffffffffffffff808211156131c257600080fd5b6131ce89838a01612d54565b909650945060408801359150808211156131e757600080fd5b506131f488828901612d54565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561325757613257613205565b60405290565b6040516060810167ffffffffffffffff8111828210171561325757613257613205565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156132c7576132c7613205565b604052919050565b600067ffffffffffffffff8211156132e9576132e9613205565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261332657600080fd5b8135613339613334826132cf565b613280565b81815284602083860101111561334e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561338157600080fd5b843561338c81612d3e565b935060208581013567ffffffffffffffff808211156133aa57600080fd5b818801915088601f8301126133be57600080fd5b8135818111156133d0576133d0613205565b6133de848260051b01613280565b81815260069190911b8301840190848101908b8311156133fd57600080fd5b938501935b82851015613449576040858d03121561341b5760008081fd5b613423613234565b853561342e81612df2565b81528587013587820152825260409094019390850190613402565b97505050604088013592508083111561346157600080fd5b505061346f87828801613315565b92505061347e60608601612e14565b905092959194509250565b8183823760009101908152919050565b600181811c908216806134ad57607f821691505b6020821081036134e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261354f57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261358e57600080fd5b83018035915067ffffffffffffffff8211156135a957600080fd5b602001915036819003821315612d9657600080fd5b6000825161354f818460208701612e41565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261360557600080fd5b830160208101925035905067ffffffffffffffff81111561362557600080fd5b803603821315612d9657600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612ff75781356136a081612df2565b73ffffffffffffffffffffffffffffffffffffffff16875281830135838801526040968701969091019060010161368d565b6020815281356020820152600060208301356136ed81612d3e565b67ffffffffffffffff808216604085015261370b60408601866135d0565b925060a0606086015261372260c086018483613634565b92505061373260608601866135d0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152613768858385613634565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030183126137a157600080fd5b602092880192830192359150838211156137ba57600080fd5b8160061b36038313156137cc57600080fd5b8685030160a0870152612a2384828461367d565b601f821115610759576000816000526020600020601f850160051c810160208610156138095750805b601f850160051c820191505b8181101561136a57828155600101613815565b67ffffffffffffffff83111561384057613840613205565b6138548361384e8354613499565b836137e0565b6000601f8411600181146138a657600085156138705750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610dfc565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156138f557868501358255602094850194600190920191016138d5565b5086821015613930577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561397c81612df2565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b680100000000000000008311156139e2576139e2613205565b805483825580841015613a6f5760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168314613a2357613a23613942565b8086168614613a3457613a34613942565b5060008360005260206000208360011b81018760011b820191505b80821015613a6a578282558284830155600282019150613a4f565b505050505b5060008181526020812083915b8581101561136a57613a8e8383613971565b6040929092019160029190910190600101613a7c565b81358155600181016020830135613aba81612d3e565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000845416178355613afa6040860186613559565b93509150613b0c838360028701613828565b613b196060860186613559565b93509150613b2b838360038701613828565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018312613b6257600080fd5b918401918235915080821115613b7757600080fd5b506020820191508060061b3603821315613b9057600080fd5b6110ed8183600486016139c9565b600060208284031215613bb057600080fd5b813567ffffffffffffffff80821115613bc857600080fd5b9083019060608286031215613bdc57600080fd5b613be461325d565b823582811115613bf357600080fd5b613bff87828601613315565b825250602083013582811115613c1457600080fd5b613c2087828601613315565b6020830152506040830135925060028310613c3a57600080fd5b6040810192909252509392505050565b60008060408385031215613c5d57600080fd5b825167ffffffffffffffff811115613c7457600080fd5b8301601f81018513613c8557600080fd5b8051613c93613334826132cf565b818152866020838501011115613ca857600080fd5b613cb9826020830160208601612e41565b60209590950151949694955050505050565b67ffffffffffffffff83168152604060208201526000825160a06040840152613cf760e0840182612e65565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080858403016060860152613d338383612e65565b92506040860151915080858403016080860152613d508383612fa5565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c086015250613d8e8282612e65565b9695505050505050565b600060208284031215613daa57600080fd5b5051919050565b604081526000613dc46040830185612e65565b90508260208301529392505050565b600060208284031215613de557600080fd5b8151611f8b81612edf565b8181038181111561076b5761076b613942565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", +} + +var CCIPClientABI = CCIPClientMetaData.ABI + +var CCIPClientBin = CCIPClientMetaData.Bin + +func DeployCCIPClient(auth *bind.TransactOpts, backend bind.ContractBackend, router common.Address, feeToken common.Address) (common.Address, *types.Transaction, *CCIPClient, error) { + parsed, err := CCIPClientMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CCIPClientBin), backend, router, feeToken) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &CCIPClient{address: address, abi: *parsed, CCIPClientCaller: CCIPClientCaller{contract: contract}, CCIPClientTransactor: CCIPClientTransactor{contract: contract}, CCIPClientFilterer: CCIPClientFilterer{contract: contract}}, nil +} + +type CCIPClient struct { + address common.Address + abi abi.ABI + CCIPClientCaller + CCIPClientTransactor + CCIPClientFilterer +} + +type CCIPClientCaller struct { + contract *bind.BoundContract +} + +type CCIPClientTransactor struct { + contract *bind.BoundContract +} + +type CCIPClientFilterer struct { + contract *bind.BoundContract +} + +type CCIPClientSession struct { + Contract *CCIPClient + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type CCIPClientCallerSession struct { + Contract *CCIPClientCaller + CallOpts bind.CallOpts +} + +type CCIPClientTransactorSession struct { + Contract *CCIPClientTransactor + TransactOpts bind.TransactOpts +} + +type CCIPClientRaw struct { + Contract *CCIPClient +} + +type CCIPClientCallerRaw struct { + Contract *CCIPClientCaller +} + +type CCIPClientTransactorRaw struct { + Contract *CCIPClientTransactor +} + +func NewCCIPClient(address common.Address, backend bind.ContractBackend) (*CCIPClient, error) { + abi, err := abi.JSON(strings.NewReader(CCIPClientABI)) + if err != nil { + return nil, err + } + contract, err := bindCCIPClient(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CCIPClient{address: address, abi: abi, CCIPClientCaller: CCIPClientCaller{contract: contract}, CCIPClientTransactor: CCIPClientTransactor{contract: contract}, CCIPClientFilterer: CCIPClientFilterer{contract: contract}}, nil +} + +func NewCCIPClientCaller(address common.Address, caller bind.ContractCaller) (*CCIPClientCaller, error) { + contract, err := bindCCIPClient(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CCIPClientCaller{contract: contract}, nil +} + +func NewCCIPClientTransactor(address common.Address, transactor bind.ContractTransactor) (*CCIPClientTransactor, error) { + contract, err := bindCCIPClient(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CCIPClientTransactor{contract: contract}, nil +} + +func NewCCIPClientFilterer(address common.Address, filterer bind.ContractFilterer) (*CCIPClientFilterer, error) { + contract, err := bindCCIPClient(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CCIPClientFilterer{contract: contract}, nil +} + +func bindCCIPClient(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CCIPClientMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_CCIPClient *CCIPClientRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPClient.Contract.CCIPClientCaller.contract.Call(opts, result, method, params...) +} + +func (_CCIPClient *CCIPClientRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPClient.Contract.CCIPClientTransactor.contract.Transfer(opts) +} + +func (_CCIPClient *CCIPClientRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPClient.Contract.CCIPClientTransactor.contract.Transact(opts, method, params...) +} + +func (_CCIPClient *CCIPClientCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPClient.Contract.contract.Call(opts, result, method, params...) +} + +func (_CCIPClient *CCIPClientTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPClient.Contract.contract.Transfer(opts) +} + +func (_CCIPClient *CCIPClientTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPClient.Contract.contract.Transact(opts, method, params...) +} + +func (_CCIPClient *CCIPClientCaller) ACKMESSAGEMAGICBYTES(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "ACKMESSAGEMAGICBYTES") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_CCIPClient *CCIPClientSession) ACKMESSAGEMAGICBYTES() ([]byte, error) { + return _CCIPClient.Contract.ACKMESSAGEMAGICBYTES(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientCallerSession) ACKMESSAGEMAGICBYTES() ([]byte, error) { + return _CCIPClient.Contract.ACKMESSAGEMAGICBYTES(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientCaller) GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "getMessageContents", messageId) + + if err != nil { + return *new(ClientAny2EVMMessage), err + } + + out0 := *abi.ConvertType(out[0], new(ClientAny2EVMMessage)).(*ClientAny2EVMMessage) + + return out0, err + +} + +func (_CCIPClient *CCIPClientSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _CCIPClient.Contract.GetMessageContents(&_CCIPClient.CallOpts, messageId) +} + +func (_CCIPClient *CCIPClientCallerSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _CCIPClient.Contract.GetMessageContents(&_CCIPClient.CallOpts, messageId) +} + +func (_CCIPClient *CCIPClientCaller) GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "getMessageStatus", messageId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_CCIPClient *CCIPClientSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _CCIPClient.Contract.GetMessageStatus(&_CCIPClient.CallOpts, messageId) +} + +func (_CCIPClient *CCIPClientCallerSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _CCIPClient.Contract.GetMessageStatus(&_CCIPClient.CallOpts, messageId) +} + +func (_CCIPClient *CCIPClientCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPClient *CCIPClientSession) GetRouter() (common.Address, error) { + return _CCIPClient.Contract.GetRouter(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientCallerSession) GetRouter() (common.Address, error) { + return _CCIPClient.Contract.GetRouter(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientCaller) IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "isApprovedSender", sourceChainSelector, senderAddr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_CCIPClient *CCIPClientSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _CCIPClient.Contract.IsApprovedSender(&_CCIPClient.CallOpts, sourceChainSelector, senderAddr) +} + +func (_CCIPClient *CCIPClientCallerSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _CCIPClient.Contract.IsApprovedSender(&_CCIPClient.CallOpts, sourceChainSelector, senderAddr) +} + +func (_CCIPClient *CCIPClientCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPClient *CCIPClientSession) Owner() (common.Address, error) { + return _CCIPClient.Contract.Owner(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientCallerSession) Owner() (common.Address, error) { + return _CCIPClient.Contract.Owner(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientCaller) SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "s_chains", arg0) + + outstruct := new(SChains) + if err != nil { + return *outstruct, err + } + + outstruct.Recipient = *abi.ConvertType(out[0], new([]byte)).(*[]byte) + outstruct.ExtraArgsBytes = *abi.ConvertType(out[1], new([]byte)).(*[]byte) + + return *outstruct, err + +} + +func (_CCIPClient *CCIPClientSession) SChains(arg0 uint64) (SChains, + + error) { + return _CCIPClient.Contract.SChains(&_CCIPClient.CallOpts, arg0) +} + +func (_CCIPClient *CCIPClientCallerSession) SChains(arg0 uint64) (SChains, + + error) { + return _CCIPClient.Contract.SChains(&_CCIPClient.CallOpts, arg0) +} + +func (_CCIPClient *CCIPClientCaller) SFeeToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "s_feeToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPClient *CCIPClientSession) SFeeToken() (common.Address, error) { + return _CCIPClient.Contract.SFeeToken(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientCallerSession) SFeeToken() (common.Address, error) { + return _CCIPClient.Contract.SFeeToken(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientCaller) SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "s_messageStatus", messageId) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_CCIPClient *CCIPClientSession) SMessageStatus(messageId [32]byte) (uint8, error) { + return _CCIPClient.Contract.SMessageStatus(&_CCIPClient.CallOpts, messageId) +} + +func (_CCIPClient *CCIPClientCallerSession) SMessageStatus(messageId [32]byte) (uint8, error) { + return _CCIPClient.Contract.SMessageStatus(&_CCIPClient.CallOpts, messageId) +} + +func (_CCIPClient *CCIPClientCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _CCIPClient.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_CCIPClient *CCIPClientSession) TypeAndVersion() (string, error) { + return _CCIPClient.Contract.TypeAndVersion(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientCallerSession) TypeAndVersion() (string, error) { + return _CCIPClient.Contract.TypeAndVersion(&_CCIPClient.CallOpts) +} + +func (_CCIPClient *CCIPClientTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "acceptOwnership") +} + +func (_CCIPClient *CCIPClientSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPClient.Contract.AcceptOwnership(&_CCIPClient.TransactOpts) +} + +func (_CCIPClient *CCIPClientTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPClient.Contract.AcceptOwnership(&_CCIPClient.TransactOpts) +} + +func (_CCIPClient *CCIPClientTransactor) CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "ccipReceive", message) +} + +func (_CCIPClient *CCIPClientSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPClient.Contract.CcipReceive(&_CCIPClient.TransactOpts, message) +} + +func (_CCIPClient *CCIPClientTransactorSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPClient.Contract.CcipReceive(&_CCIPClient.TransactOpts, message) +} + +func (_CCIPClient *CCIPClientTransactor) CcipSend(opts *bind.TransactOpts, destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "ccipSend", destChainSelector, tokenAmounts, data, feeToken) +} + +func (_CCIPClient *CCIPClientSession) CcipSend(destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _CCIPClient.Contract.CcipSend(&_CCIPClient.TransactOpts, destChainSelector, tokenAmounts, data, feeToken) +} + +func (_CCIPClient *CCIPClientTransactorSession) CcipSend(destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _CCIPClient.Contract.CcipSend(&_CCIPClient.TransactOpts, destChainSelector, tokenAmounts, data, feeToken) +} + +func (_CCIPClient *CCIPClientTransactor) DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "disableChain", chainSelector) +} + +func (_CCIPClient *CCIPClientSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _CCIPClient.Contract.DisableChain(&_CCIPClient.TransactOpts, chainSelector) +} + +func (_CCIPClient *CCIPClientTransactorSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _CCIPClient.Contract.DisableChain(&_CCIPClient.TransactOpts, chainSelector) +} + +func (_CCIPClient *CCIPClientTransactor) EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "enableChain", chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPClient *CCIPClientSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPClient.Contract.EnableChain(&_CCIPClient.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPClient *CCIPClientTransactorSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPClient.Contract.EnableChain(&_CCIPClient.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPClient *CCIPClientTransactor) ModifyFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "modifyFeeToken", token) +} + +func (_CCIPClient *CCIPClientSession) ModifyFeeToken(token common.Address) (*types.Transaction, error) { + return _CCIPClient.Contract.ModifyFeeToken(&_CCIPClient.TransactOpts, token) +} + +func (_CCIPClient *CCIPClientTransactorSession) ModifyFeeToken(token common.Address) (*types.Transaction, error) { + return _CCIPClient.Contract.ModifyFeeToken(&_CCIPClient.TransactOpts, token) +} + +func (_CCIPClient *CCIPClientTransactor) ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "processMessage", message) +} + +func (_CCIPClient *CCIPClientSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPClient.Contract.ProcessMessage(&_CCIPClient.TransactOpts, message) +} + +func (_CCIPClient *CCIPClientTransactorSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPClient.Contract.ProcessMessage(&_CCIPClient.TransactOpts, message) +} + +func (_CCIPClient *CCIPClientTransactor) RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "retryFailedMessage", messageId) +} + +func (_CCIPClient *CCIPClientSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _CCIPClient.Contract.RetryFailedMessage(&_CCIPClient.TransactOpts, messageId) +} + +func (_CCIPClient *CCIPClientTransactorSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _CCIPClient.Contract.RetryFailedMessage(&_CCIPClient.TransactOpts, messageId) +} + +func (_CCIPClient *CCIPClientTransactor) SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "setSimRevert", simRevert) +} + +func (_CCIPClient *CCIPClientSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _CCIPClient.Contract.SetSimRevert(&_CCIPClient.TransactOpts, simRevert) +} + +func (_CCIPClient *CCIPClientTransactorSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _CCIPClient.Contract.SetSimRevert(&_CCIPClient.TransactOpts, simRevert) +} + +func (_CCIPClient *CCIPClientTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "transferOwnership", to) +} + +func (_CCIPClient *CCIPClientSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPClient.Contract.TransferOwnership(&_CCIPClient.TransactOpts, to) +} + +func (_CCIPClient *CCIPClientTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPClient.Contract.TransferOwnership(&_CCIPClient.TransactOpts, to) +} + +func (_CCIPClient *CCIPClientTransactor) UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "updateApprovedSenders", adds, removes) +} + +func (_CCIPClient *CCIPClientSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPClient.Contract.UpdateApprovedSenders(&_CCIPClient.TransactOpts, adds, removes) +} + +func (_CCIPClient *CCIPClientTransactorSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPClient.Contract.UpdateApprovedSenders(&_CCIPClient.TransactOpts, adds, removes) +} + +func (_CCIPClient *CCIPClientTransactor) WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "withdrawNativeToken", to, amount) +} + +func (_CCIPClient *CCIPClientSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPClient.Contract.WithdrawNativeToken(&_CCIPClient.TransactOpts, to, amount) +} + +func (_CCIPClient *CCIPClientTransactorSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPClient.Contract.WithdrawNativeToken(&_CCIPClient.TransactOpts, to, amount) +} + +func (_CCIPClient *CCIPClientTransactor) WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPClient.contract.Transact(opts, "withdrawTokens", token, to, amount) +} + +func (_CCIPClient *CCIPClientSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPClient.Contract.WithdrawTokens(&_CCIPClient.TransactOpts, token, to, amount) +} + +func (_CCIPClient *CCIPClientTransactorSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPClient.Contract.WithdrawTokens(&_CCIPClient.TransactOpts, token, to, amount) +} + +func (_CCIPClient *CCIPClientTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _CCIPClient.contract.RawTransact(opts, calldata) +} + +func (_CCIPClient *CCIPClientSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _CCIPClient.Contract.Fallback(&_CCIPClient.TransactOpts, calldata) +} + +func (_CCIPClient *CCIPClientTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _CCIPClient.Contract.Fallback(&_CCIPClient.TransactOpts, calldata) +} + +func (_CCIPClient *CCIPClientTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPClient.contract.RawTransact(opts, nil) +} + +func (_CCIPClient *CCIPClientSession) Receive() (*types.Transaction, error) { + return _CCIPClient.Contract.Receive(&_CCIPClient.TransactOpts) +} + +func (_CCIPClient *CCIPClientTransactorSession) Receive() (*types.Transaction, error) { + return _CCIPClient.Contract.Receive(&_CCIPClient.TransactOpts) +} + +type CCIPClientFeeTokenModifiedIterator struct { + Event *CCIPClientFeeTokenModified + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPClientFeeTokenModifiedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPClientFeeTokenModified) + 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(CCIPClientFeeTokenModified) + 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 *CCIPClientFeeTokenModifiedIterator) Error() error { + return it.fail +} + +func (it *CCIPClientFeeTokenModifiedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPClientFeeTokenModified struct { + OldToken common.Address + NewToken common.Address + Raw types.Log +} + +func (_CCIPClient *CCIPClientFilterer) FilterFeeTokenModified(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*CCIPClientFeeTokenModifiedIterator, error) { + + var oldTokenRule []interface{} + for _, oldTokenItem := range oldToken { + oldTokenRule = append(oldTokenRule, oldTokenItem) + } + var newTokenRule []interface{} + for _, newTokenItem := range newToken { + newTokenRule = append(newTokenRule, newTokenItem) + } + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "FeeTokenModified", oldTokenRule, newTokenRule) + if err != nil { + return nil, err + } + return &CCIPClientFeeTokenModifiedIterator{contract: _CCIPClient.contract, event: "FeeTokenModified", logs: logs, sub: sub}, nil +} + +func (_CCIPClient *CCIPClientFilterer) WatchFeeTokenModified(opts *bind.WatchOpts, sink chan<- *CCIPClientFeeTokenModified, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) { + + var oldTokenRule []interface{} + for _, oldTokenItem := range oldToken { + oldTokenRule = append(oldTokenRule, oldTokenItem) + } + var newTokenRule []interface{} + for _, newTokenItem := range newToken { + newTokenRule = append(newTokenRule, newTokenItem) + } + + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "FeeTokenModified", oldTokenRule, newTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPClientFeeTokenModified) + if err := _CCIPClient.contract.UnpackLog(event, "FeeTokenModified", 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 (_CCIPClient *CCIPClientFilterer) ParseFeeTokenModified(log types.Log) (*CCIPClientFeeTokenModified, error) { + event := new(CCIPClientFeeTokenModified) + if err := _CCIPClient.contract.UnpackLog(event, "FeeTokenModified", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPClientMessageAckReceivedIterator struct { + Event *CCIPClientMessageAckReceived + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPClientMessageAckReceivedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPClientMessageAckReceived) + 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(CCIPClientMessageAckReceived) + 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 *CCIPClientMessageAckReceivedIterator) Error() error { + return it.fail +} + +func (it *CCIPClientMessageAckReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPClientMessageAckReceived struct { + Arg0 [32]byte + Raw types.Log +} + +func (_CCIPClient *CCIPClientFilterer) FilterMessageAckReceived(opts *bind.FilterOpts) (*CCIPClientMessageAckReceivedIterator, error) { + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "MessageAckReceived") + if err != nil { + return nil, err + } + return &CCIPClientMessageAckReceivedIterator{contract: _CCIPClient.contract, event: "MessageAckReceived", logs: logs, sub: sub}, nil +} + +func (_CCIPClient *CCIPClientFilterer) WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageAckReceived) (event.Subscription, error) { + + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "MessageAckReceived") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPClientMessageAckReceived) + if err := _CCIPClient.contract.UnpackLog(event, "MessageAckReceived", 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 (_CCIPClient *CCIPClientFilterer) ParseMessageAckReceived(log types.Log) (*CCIPClientMessageAckReceived, error) { + event := new(CCIPClientMessageAckReceived) + if err := _CCIPClient.contract.UnpackLog(event, "MessageAckReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPClientMessageAckSentIterator struct { + Event *CCIPClientMessageAckSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPClientMessageAckSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPClientMessageAckSent) + 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(CCIPClientMessageAckSent) + 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 *CCIPClientMessageAckSentIterator) Error() error { + return it.fail +} + +func (it *CCIPClientMessageAckSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPClientMessageAckSent struct { + IncomingMessageId [32]byte + Raw types.Log +} + +func (_CCIPClient *CCIPClientFilterer) FilterMessageAckSent(opts *bind.FilterOpts) (*CCIPClientMessageAckSentIterator, error) { + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "MessageAckSent") + if err != nil { + return nil, err + } + return &CCIPClientMessageAckSentIterator{contract: _CCIPClient.contract, event: "MessageAckSent", logs: logs, sub: sub}, nil +} + +func (_CCIPClient *CCIPClientFilterer) WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageAckSent) (event.Subscription, error) { + + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "MessageAckSent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPClientMessageAckSent) + if err := _CCIPClient.contract.UnpackLog(event, "MessageAckSent", 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 (_CCIPClient *CCIPClientFilterer) ParseMessageAckSent(log types.Log) (*CCIPClientMessageAckSent, error) { + event := new(CCIPClientMessageAckSent) + if err := _CCIPClient.contract.UnpackLog(event, "MessageAckSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPClientMessageFailedIterator struct { + Event *CCIPClientMessageFailed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPClientMessageFailedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPClientMessageFailed) + 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(CCIPClientMessageFailed) + 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 *CCIPClientMessageFailedIterator) Error() error { + return it.fail +} + +func (it *CCIPClientMessageFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPClientMessageFailed struct { + MessageId [32]byte + Reason []byte + Raw types.Log +} + +func (_CCIPClient *CCIPClientFilterer) FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPClientMessageFailedIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return &CCIPClientMessageFailedIterator{contract: _CCIPClient.contract, event: "MessageFailed", logs: logs, sub: sub}, nil +} + +func (_CCIPClient *CCIPClientFilterer) WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageFailed, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPClientMessageFailed) + if err := _CCIPClient.contract.UnpackLog(event, "MessageFailed", 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 (_CCIPClient *CCIPClientFilterer) ParseMessageFailed(log types.Log) (*CCIPClientMessageFailed, error) { + event := new(CCIPClientMessageFailed) + if err := _CCIPClient.contract.UnpackLog(event, "MessageFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPClientMessageRecoveredIterator struct { + Event *CCIPClientMessageRecovered + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPClientMessageRecoveredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPClientMessageRecovered) + 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(CCIPClientMessageRecovered) + 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 *CCIPClientMessageRecoveredIterator) Error() error { + return it.fail +} + +func (it *CCIPClientMessageRecoveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPClientMessageRecovered struct { + MessageId [32]byte + Raw types.Log +} + +func (_CCIPClient *CCIPClientFilterer) FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPClientMessageRecoveredIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return &CCIPClientMessageRecoveredIterator{contract: _CCIPClient.contract, event: "MessageRecovered", logs: logs, sub: sub}, nil +} + +func (_CCIPClient *CCIPClientFilterer) WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageRecovered, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPClientMessageRecovered) + if err := _CCIPClient.contract.UnpackLog(event, "MessageRecovered", 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 (_CCIPClient *CCIPClientFilterer) ParseMessageRecovered(log types.Log) (*CCIPClientMessageRecovered, error) { + event := new(CCIPClientMessageRecovered) + if err := _CCIPClient.contract.UnpackLog(event, "MessageRecovered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPClientMessageSentIterator struct { + Event *CCIPClientMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPClientMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPClientMessageSent) + 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(CCIPClientMessageSent) + 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 *CCIPClientMessageSentIterator) Error() error { + return it.fail +} + +func (it *CCIPClientMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPClientMessageSent struct { + IncomingMessageId [32]byte + ACKMessageId [32]byte + Raw types.Log +} + +func (_CCIPClient *CCIPClientFilterer) FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*CCIPClientMessageSentIterator, error) { + + var incomingMessageIdRule []interface{} + for _, incomingMessageIdItem := range incomingMessageId { + incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) + } + var ACKMessageIdRule []interface{} + for _, ACKMessageIdItem := range ACKMessageId { + ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) + } + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + if err != nil { + return nil, err + } + return &CCIPClientMessageSentIterator{contract: _CCIPClient.contract, event: "MessageSent", logs: logs, sub: sub}, nil +} + +func (_CCIPClient *CCIPClientFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) { + + var incomingMessageIdRule []interface{} + for _, incomingMessageIdItem := range incomingMessageId { + incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) + } + var ACKMessageIdRule []interface{} + for _, ACKMessageIdItem := range ACKMessageId { + ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) + } + + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPClientMessageSent) + if err := _CCIPClient.contract.UnpackLog(event, "MessageSent", 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 (_CCIPClient *CCIPClientFilterer) ParseMessageSent(log types.Log) (*CCIPClientMessageSent, error) { + event := new(CCIPClientMessageSent) + if err := _CCIPClient.contract.UnpackLog(event, "MessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPClientMessageSucceededIterator struct { + Event *CCIPClientMessageSucceeded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPClientMessageSucceededIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPClientMessageSucceeded) + 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(CCIPClientMessageSucceeded) + 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 *CCIPClientMessageSucceededIterator) Error() error { + return it.fail +} + +func (it *CCIPClientMessageSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPClientMessageSucceeded struct { + MessageId [32]byte + Raw types.Log +} + +func (_CCIPClient *CCIPClientFilterer) FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPClientMessageSucceededIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return &CCIPClientMessageSucceededIterator{contract: _CCIPClient.contract, event: "MessageSucceeded", logs: logs, sub: sub}, nil +} + +func (_CCIPClient *CCIPClientFilterer) WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageSucceeded, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPClientMessageSucceeded) + if err := _CCIPClient.contract.UnpackLog(event, "MessageSucceeded", 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 (_CCIPClient *CCIPClientFilterer) ParseMessageSucceeded(log types.Log) (*CCIPClientMessageSucceeded, error) { + event := new(CCIPClientMessageSucceeded) + if err := _CCIPClient.contract.UnpackLog(event, "MessageSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPClientOwnershipTransferRequestedIterator struct { + Event *CCIPClientOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPClientOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPClientOwnershipTransferRequested) + 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(CCIPClientOwnershipTransferRequested) + 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 *CCIPClientOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *CCIPClientOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPClientOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPClient *CCIPClientFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPClientOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPClientOwnershipTransferRequestedIterator{contract: _CCIPClient.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_CCIPClient *CCIPClientFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPClientOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPClientOwnershipTransferRequested) + if err := _CCIPClient.contract.UnpackLog(event, "OwnershipTransferRequested", 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 (_CCIPClient *CCIPClientFilterer) ParseOwnershipTransferRequested(log types.Log) (*CCIPClientOwnershipTransferRequested, error) { + event := new(CCIPClientOwnershipTransferRequested) + if err := _CCIPClient.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPClientOwnershipTransferredIterator struct { + Event *CCIPClientOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPClientOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPClientOwnershipTransferred) + 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(CCIPClientOwnershipTransferred) + 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 *CCIPClientOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *CCIPClientOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPClientOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPClient *CCIPClientFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPClientOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPClient.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPClientOwnershipTransferredIterator{contract: _CCIPClient.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_CCIPClient *CCIPClientFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPClientOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPClient.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPClientOwnershipTransferred) + if err := _CCIPClient.contract.UnpackLog(event, "OwnershipTransferred", 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 (_CCIPClient *CCIPClientFilterer) ParseOwnershipTransferred(log types.Log) (*CCIPClientOwnershipTransferred, error) { + event := new(CCIPClientOwnershipTransferred) + if err := _CCIPClient.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SChains struct { + Recipient []byte + ExtraArgsBytes []byte +} + +func (_CCIPClient *CCIPClient) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _CCIPClient.abi.Events["FeeTokenModified"].ID: + return _CCIPClient.ParseFeeTokenModified(log) + case _CCIPClient.abi.Events["MessageAckReceived"].ID: + return _CCIPClient.ParseMessageAckReceived(log) + case _CCIPClient.abi.Events["MessageAckSent"].ID: + return _CCIPClient.ParseMessageAckSent(log) + case _CCIPClient.abi.Events["MessageFailed"].ID: + return _CCIPClient.ParseMessageFailed(log) + case _CCIPClient.abi.Events["MessageRecovered"].ID: + return _CCIPClient.ParseMessageRecovered(log) + case _CCIPClient.abi.Events["MessageSent"].ID: + return _CCIPClient.ParseMessageSent(log) + case _CCIPClient.abi.Events["MessageSucceeded"].ID: + return _CCIPClient.ParseMessageSucceeded(log) + case _CCIPClient.abi.Events["OwnershipTransferRequested"].ID: + return _CCIPClient.ParseOwnershipTransferRequested(log) + case _CCIPClient.abi.Events["OwnershipTransferred"].ID: + return _CCIPClient.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (CCIPClientFeeTokenModified) Topic() common.Hash { + return common.HexToHash("0x4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e") +} + +func (CCIPClientMessageAckReceived) Topic() common.Hash { + return common.HexToHash("0xef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79") +} + +func (CCIPClientMessageAckSent) Topic() common.Hash { + return common.HexToHash("0x75944f95ba0be568cb30faeb0ef135cb73d07006939da29722d670a97f5c5b26") +} + +func (CCIPClientMessageFailed) Topic() common.Hash { + return common.HexToHash("0x55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f") +} + +func (CCIPClientMessageRecovered) Topic() common.Hash { + return common.HexToHash("0xef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad") +} + +func (CCIPClientMessageSent) Topic() common.Hash { + return common.HexToHash("0x9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372") +} + +func (CCIPClientMessageSucceeded) Topic() common.Hash { + return common.HexToHash("0xdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f") +} + +func (CCIPClientOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (CCIPClientOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_CCIPClient *CCIPClient) Address() common.Address { + return _CCIPClient.address +} + +type CCIPClientInterface interface { + ACKMESSAGEMAGICBYTES(opts *bind.CallOpts) ([]byte, error) + + GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) + + GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) + + SFeeToken(opts *bind.CallOpts) (common.Address, error) + + SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + CcipSend(opts *bind.TransactOpts, destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) + + DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) + + EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) + + ModifyFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) + + ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) + + SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) + + WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) + + WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + + Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterFeeTokenModified(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*CCIPClientFeeTokenModifiedIterator, error) + + WatchFeeTokenModified(opts *bind.WatchOpts, sink chan<- *CCIPClientFeeTokenModified, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) + + ParseFeeTokenModified(log types.Log) (*CCIPClientFeeTokenModified, error) + + FilterMessageAckReceived(opts *bind.FilterOpts) (*CCIPClientMessageAckReceivedIterator, error) + + WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageAckReceived) (event.Subscription, error) + + ParseMessageAckReceived(log types.Log) (*CCIPClientMessageAckReceived, error) + + FilterMessageAckSent(opts *bind.FilterOpts) (*CCIPClientMessageAckSentIterator, error) + + WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageAckSent) (event.Subscription, error) + + ParseMessageAckSent(log types.Log) (*CCIPClientMessageAckSent, error) + + FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPClientMessageFailedIterator, error) + + WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageFailed, messageId [][32]byte) (event.Subscription, error) + + ParseMessageFailed(log types.Log) (*CCIPClientMessageFailed, error) + + FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPClientMessageRecoveredIterator, error) + + WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageRecovered, messageId [][32]byte) (event.Subscription, error) + + ParseMessageRecovered(log types.Log) (*CCIPClientMessageRecovered, error) + + FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*CCIPClientMessageSentIterator, error) + + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) + + ParseMessageSent(log types.Log) (*CCIPClientMessageSent, error) + + FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPClientMessageSucceededIterator, error) + + WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *CCIPClientMessageSucceeded, messageId [][32]byte) (event.Subscription, error) + + ParseMessageSucceeded(log types.Log) (*CCIPClientMessageSucceeded, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPClientOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPClientOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*CCIPClientOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPClientOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPClientOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*CCIPClientOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} diff --git a/core/gethwrappers/ccip/generated/ccipReceiver/ccipReceiver.go b/core/gethwrappers/ccip/generated/ccipReceiver/ccipReceiver.go new file mode 100644 index 0000000000..d37361a365 --- /dev/null +++ b/core/gethwrappers/ccip/generated/ccipReceiver/ccipReceiver.go @@ -0,0 +1,1287 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ccipReceiver + +import ( + "errors" + "fmt" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "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 ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type ICCIPClientBaseapprovedSenderUpdate struct { + DestChainSelector uint64 + Sender []byte +} + +var CCIPReceiverMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrorCase\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"disableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"enableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"s_chains\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"simRevert\",\"type\":\"bool\"}],\"name\":\"setSimRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b50604051620029e6380380620029e68339810160408190526200003491620001a8565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620000fd565b5050506001600160a01b038116620000ea576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b031660805250620001da565b336001600160a01b03821603620001575760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bb57600080fd5b81516001600160a01b0381168114620001d357600080fd5b9392505050565b6080516127e9620001fd6000396000818161035e0152610b4801526127e96000f3fe60806040526004361061011b5760003560e01c806379ba50971161009c578063b0f479a11161006e578063d8469e4011610056578063d8469e40146103a2578063e4ca8754146103c2578063f2fde38b146103e257005b8063b0f479a11461034f578063cf6730f81461038257005b806379ba5097146102ae5780638462a2b9146102c357806385572ffb146102e35780638da5cb5b1461030357005b806352f813c3116100ed5780635dc5ebdb116100d55780635dc5ebdb146102335780635e35359e146102615780636939cd971461028157005b806352f813c3146101f3578063536c6bfa1461021357005b80630e958d6b14610124578063181f5a771461015957806341eade46146101a55780635075a9d4146101c557005b3661012257005b005b34801561013057600080fd5b5061014461013f366004611bc1565b610402565b60405190151581526020015b60405180910390f35b34801561016557600080fd5b50604080518082018252601681527f43434950526563656976657220312e302e302d64657600000000000000000000602082015290516101509190611c84565b3480156101b157600080fd5b506101226101c0366004611c97565b61044c565b3480156101d157600080fd5b506101e56101e0366004611cb4565b61048b565b604051908152602001610150565b3480156101ff57600080fd5b5061012261020e366004611cdb565b61049e565b34801561021f57600080fd5b5061012261022e366004611d1a565b6104d7565b34801561023f57600080fd5b5061025361024e366004611c97565b6104ed565b604051610150929190611d46565b34801561026d57600080fd5b5061012261027c366004611d74565b610619565b34801561028d57600080fd5b506102a161029c366004611cb4565b610642565b6040516101509190611db5565b3480156102ba57600080fd5b5061012261084d565b3480156102cf57600080fd5b506101226102de366004611ee1565b61094f565b3480156102ef57600080fd5b506101226102fe366004611f4d565b610b30565b34801561030f57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610150565b34801561035b57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061032a565b34801561038e57600080fd5b5061012261039d366004611f4d565b610d57565b3480156103ae57600080fd5b506101226103bd366004611f88565b610e92565b3480156103ce57600080fd5b506101226103dd366004611cb4565b610ef4565b3480156103ee57600080fd5b506101226103fd36600461200b565b611172565b67ffffffffffffffff8316600090815260026020819052604080832090519101906104309085908590612028565b9081526040519081900360200190205460ff1690509392505050565b610454611186565b67ffffffffffffffff81166000908152600260205260408120906104788282611b14565b610486600183016000611b14565b505050565b6000610498600483611209565b92915050565b6104a6611186565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6104df611186565b6104e9828261121c565b5050565b60026020526000908152604090208054819061050890612038565b80601f016020809104026020016040519081016040528092919081815260200182805461053490612038565b80156105815780601f1061055657610100808354040283529160200191610581565b820191906000526020600020905b81548152906001019060200180831161056457829003601f168201915b50505050509080600101805461059690612038565b80601f01602080910402602001604051908101604052809291908181526020018280546105c290612038565b801561060f5780601f106105e45761010080835404028352916020019161060f565b820191906000526020600020905b8154815290600101906020018083116105f257829003601f168201915b5050505050905082565b610621611186565b61048673ffffffffffffffffffffffffffffffffffffffff84168383611376565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260038152908490208451928301855280548352600181015467ffffffffffffffff16918301919091526002810180549394929391928401916106b190612038565b80601f01602080910402602001604051908101604052809291908181526020018280546106dd90612038565b801561072a5780601f106106ff5761010080835404028352916020019161072a565b820191906000526020600020905b81548152906001019060200180831161070d57829003601f168201915b5050505050815260200160038201805461074390612038565b80601f016020809104026020016040519081016040528092919081815260200182805461076f90612038565b80156107bc5780601f10610791576101008083540402835291602001916107bc565b820191906000526020600020905b81548152906001019060200180831161079f57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b8282101561083f5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff1682526001908101548284015290835290920191016107ea565b505050915250909392505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146108d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610957611186565b60005b81811015610a3a57600260008484848181106109785761097861208b565b905060200281019061098a91906120ba565b610998906020810190611c97565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018383838181106109cf576109cf61208b565b90506020028101906109e191906120ba565b6109ef9060208101906120f8565b6040516109fd929190612028565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560010161095a565b5060005b83811015610b2957600160026000878785818110610a5e57610a5e61208b565b9050602002810190610a7091906120ba565b610a7e906020810190611c97565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610ab557610ab561208b565b9050602002810190610ac791906120ba565b610ad59060208101906120f8565b604051610ae3929190612028565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055600101610a3e565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610ba1576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024016108ca565b610bb16040820160208301611c97565b67ffffffffffffffff811660009081526002602052604090208054610bd590612038565b9050600003610c1c576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016108ca565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890610c5890859060040161226a565b600060405180830381600087803b158015610c7257600080fd5b505af1925050508015610c83575060015b610d27573d808015610cb1576040519150601f19603f3d011682016040523d82523d6000602084013e610cb6565b606091505b50610cc8833560015b60049190611403565b50823560009081526003602052604090208390610ce5828261266b565b50506040518335907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f90610d1a908490611c84565b60405180910390a2505050565b6040518235907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050565b333014610d90576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da06040820160208301611c97565b610dad60408301836120f8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260026020819052604091829020915191019350610e0a925084915061276b565b9081526040519081900360200190205460ff16610e5557806040517f5075bb380000000000000000000000000000000000000000000000000000000081526004016108ca9190611c84565b60075460ff1615610486576040517f79f79e0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e9a611186565b67ffffffffffffffff85166000908152600260205260409020610ebe8486836123ef565b508015610b295767ffffffffffffffff85166000908152600260205260409020600101610eec8284836123ef565b505050505050565b610efc611186565b6001610f09600483611209565b14610f43576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018290526024016108ca565b610f4e816000610cbf565b506000818152600360209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610f9690612038565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc290612038565b801561100f5780601f10610fe45761010080835404028352916020019161100f565b820191906000526020600020905b815481529060010190602001808311610ff257829003601f168201915b5050505050815260200160038201805461102890612038565b80601f016020809104026020016040519081016040528092919081815260200182805461105490612038565b80156110a15780601f10611076576101008083540402835291602001916110a1565b820191906000526020600020905b81548152906001019060200180831161108457829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156111245760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff1682526001908101548284015290835290920191016110cf565b5050505081525050905061113781611418565b6111426004836114be565b5060405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b61117a611186565b611183816114ca565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611207576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016108ca565b565b600061121583836115bf565b9392505050565b80471015611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108ca565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146112e0576040519150601f19603f3d011682016040523d82523d6000602084013e6112e5565b606091505b5050905080610486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016108ca565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610486908490611649565b6000611410848484611755565b949350505050565b60005b8160800151518110156104e9576000826080015182815181106114405761144061208b565b60200260200101516020015190506000836080015183815181106114665761146661208b565b60200260200101516000015190506114b461149660005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff83169084611376565b505060010161141b565b60006112158383611772565b3373ffffffffffffffffffffffffffffffffffffffff821603611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016108ca565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000818152600283016020526040812054801515806115e357506115e3848461178f565b611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016108ca565b60006116ab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661179b9092919063ffffffff16565b80519091501561048657808060200190518101906116c9919061277d565b610486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108ca565b6000828152600284016020526040812082905561141084846117aa565b6000818152600283016020526040812081905561121583836117b6565b600061121583836117c2565b606061141084846000856117da565b600061121583836118f3565b60006112158383611942565b60008181526001830160205260408120541515611215565b60608247101561186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108ca565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611895919061276b565b60006040518083038185875af1925050503d80600081146118d2576040519150601f19603f3d011682016040523d82523d6000602084013e6118d7565b606091505b50915091506118e887838387611a35565b979650505050505050565b600081815260018301602052604081205461193a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610498565b506000610498565b60008181526001830160205260408120548015611a2b57600061196660018361279a565b855490915060009061197a9060019061279a565b90508181146119df57600086600001828154811061199a5761199a61208b565b90600052602060002001549050808760000184815481106119bd576119bd61208b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806119f0576119f06127ad565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610498565b6000915050610498565b60608315611acb578251600003611ac45773ffffffffffffffffffffffffffffffffffffffff85163b611ac4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108ca565b5081611410565b6114108383815115611ae05781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca9190611c84565b508054611b2090612038565b6000825580601f10611b30575050565b601f01602090049060005260206000209081019061118391905b80821115611b5e5760008155600101611b4a565b5090565b67ffffffffffffffff8116811461118357600080fd5b60008083601f840112611b8a57600080fd5b50813567ffffffffffffffff811115611ba257600080fd5b602083019150836020828501011115611bba57600080fd5b9250929050565b600080600060408486031215611bd657600080fd5b8335611be181611b62565b9250602084013567ffffffffffffffff811115611bfd57600080fd5b611c0986828701611b78565b9497909650939450505050565b60005b83811015611c31578181015183820152602001611c19565b50506000910152565b60008151808452611c52816020860160208601611c16565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112156020830184611c3a565b600060208284031215611ca957600080fd5b813561121581611b62565b600060208284031215611cc657600080fd5b5035919050565b801515811461118357600080fd5b600060208284031215611ced57600080fd5b813561121581611ccd565b73ffffffffffffffffffffffffffffffffffffffff8116811461118357600080fd5b60008060408385031215611d2d57600080fd5b8235611d3881611cf8565b946020939093013593505050565b604081526000611d596040830185611c3a565b8281036020840152611d6b8185611c3a565b95945050505050565b600080600060608486031215611d8957600080fd5b8335611d9481611cf8565b92506020840135611da481611cf8565b929592945050506040919091013590565b6000602080835283518184015280840151604067ffffffffffffffff821660408601526040860151915060a06060860152611df360c0860183611c3a565b915060608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878503016080880152611e2f8483611c3a565b608089015188820390920160a089015281518082529186019450600092508501905b80831015611e90578451805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152938501936001929092019190830190611e51565b50979650505050505050565b60008083601f840112611eae57600080fd5b50813567ffffffffffffffff811115611ec657600080fd5b6020830191508360208260051b8501011115611bba57600080fd5b60008060008060408587031215611ef757600080fd5b843567ffffffffffffffff80821115611f0f57600080fd5b611f1b88838901611e9c565b90965094506020870135915080821115611f3457600080fd5b50611f4187828801611e9c565b95989497509550505050565b600060208284031215611f5f57600080fd5b813567ffffffffffffffff811115611f7657600080fd5b820160a0818503121561121557600080fd5b600080600080600060608688031215611fa057600080fd5b8535611fab81611b62565b9450602086013567ffffffffffffffff80821115611fc857600080fd5b611fd489838a01611b78565b90965094506040880135915080821115611fed57600080fd5b50611ffa88828901611b78565b969995985093965092949392505050565b60006020828403121561201d57600080fd5b813561121581611cf8565b8183823760009101908152919050565b600181811c9082168061204c57607f821691505b602082108103612085577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126120ee57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261212d57600080fd5b83018035915067ffffffffffffffff82111561214857600080fd5b602001915036819003821315611bba57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261219257600080fd5b830160208101925035905067ffffffffffffffff8111156121b257600080fd5b803603821315611bba57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b8581101561225f57813561222d81611cf8565b73ffffffffffffffffffffffffffffffffffffffff16875281830135838801526040968701969091019060010161221a565b509495945050505050565b60208152813560208201526000602083013561228581611b62565b67ffffffffffffffff80821660408501526122a3604086018661215d565b925060a060608601526122ba60c0860184836121c1565b9250506122ca606086018661215d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808786030160808801526123008583856121c1565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261233957600080fd5b6020928801928301923591508382111561235257600080fd5b8160061b360383131561236457600080fd5b8685030160a08701526118e884828461220a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610486576000816000526020600020601f850160051c810160208610156123d05750805b601f850160051c820191505b81811015610eec578281556001016123dc565b67ffffffffffffffff83111561240757612407612378565b61241b836124158354612038565b836123a7565b6000601f84116001811461246d57600085156124375750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610b29565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156124bc578685013582556020948501946001909201910161249c565b50868210156124f7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561254381611cf8565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b680100000000000000008311156125a9576125a9612378565b8054838255808410156126365760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146125ea576125ea612509565b80861686146125fb576125fb612509565b5060008360005260206000208360011b81018760011b820191505b80821015612631578282558284830155600282019150612616565b505050505b5060008181526020812083915b85811015610eec576126558383612538565b6040929092019160029190910190600101612643565b8135815560018101602083013561268181611b62565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556126c160408601866120f8565b935091506126d38383600287016123ef565b6126e060608601866120f8565b935091506126f28383600387016123ef565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261272957600080fd5b91840191823591508082111561273e57600080fd5b506020820191508060061b360382131561275757600080fd5b612765818360048601612590565b50505050565b600082516120ee818460208701611c16565b60006020828403121561278f57600080fd5b815161121581611ccd565b8181038181111561049857610498612509565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", +} + +var CCIPReceiverABI = CCIPReceiverMetaData.ABI + +var CCIPReceiverBin = CCIPReceiverMetaData.Bin + +func DeployCCIPReceiver(auth *bind.TransactOpts, backend bind.ContractBackend, router common.Address) (common.Address, *types.Transaction, *CCIPReceiver, error) { + parsed, err := CCIPReceiverMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CCIPReceiverBin), backend, router) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &CCIPReceiver{address: address, abi: *parsed, CCIPReceiverCaller: CCIPReceiverCaller{contract: contract}, CCIPReceiverTransactor: CCIPReceiverTransactor{contract: contract}, CCIPReceiverFilterer: CCIPReceiverFilterer{contract: contract}}, nil +} + +type CCIPReceiver struct { + address common.Address + abi abi.ABI + CCIPReceiverCaller + CCIPReceiverTransactor + CCIPReceiverFilterer +} + +type CCIPReceiverCaller struct { + contract *bind.BoundContract +} + +type CCIPReceiverTransactor struct { + contract *bind.BoundContract +} + +type CCIPReceiverFilterer struct { + contract *bind.BoundContract +} + +type CCIPReceiverSession struct { + Contract *CCIPReceiver + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type CCIPReceiverCallerSession struct { + Contract *CCIPReceiverCaller + CallOpts bind.CallOpts +} + +type CCIPReceiverTransactorSession struct { + Contract *CCIPReceiverTransactor + TransactOpts bind.TransactOpts +} + +type CCIPReceiverRaw struct { + Contract *CCIPReceiver +} + +type CCIPReceiverCallerRaw struct { + Contract *CCIPReceiverCaller +} + +type CCIPReceiverTransactorRaw struct { + Contract *CCIPReceiverTransactor +} + +func NewCCIPReceiver(address common.Address, backend bind.ContractBackend) (*CCIPReceiver, error) { + abi, err := abi.JSON(strings.NewReader(CCIPReceiverABI)) + if err != nil { + return nil, err + } + contract, err := bindCCIPReceiver(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CCIPReceiver{address: address, abi: abi, CCIPReceiverCaller: CCIPReceiverCaller{contract: contract}, CCIPReceiverTransactor: CCIPReceiverTransactor{contract: contract}, CCIPReceiverFilterer: CCIPReceiverFilterer{contract: contract}}, nil +} + +func NewCCIPReceiverCaller(address common.Address, caller bind.ContractCaller) (*CCIPReceiverCaller, error) { + contract, err := bindCCIPReceiver(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CCIPReceiverCaller{contract: contract}, nil +} + +func NewCCIPReceiverTransactor(address common.Address, transactor bind.ContractTransactor) (*CCIPReceiverTransactor, error) { + contract, err := bindCCIPReceiver(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CCIPReceiverTransactor{contract: contract}, nil +} + +func NewCCIPReceiverFilterer(address common.Address, filterer bind.ContractFilterer) (*CCIPReceiverFilterer, error) { + contract, err := bindCCIPReceiver(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CCIPReceiverFilterer{contract: contract}, nil +} + +func bindCCIPReceiver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CCIPReceiverMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_CCIPReceiver *CCIPReceiverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPReceiver.Contract.CCIPReceiverCaller.contract.Call(opts, result, method, params...) +} + +func (_CCIPReceiver *CCIPReceiverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReceiver.Contract.CCIPReceiverTransactor.contract.Transfer(opts) +} + +func (_CCIPReceiver *CCIPReceiverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPReceiver.Contract.CCIPReceiverTransactor.contract.Transact(opts, method, params...) +} + +func (_CCIPReceiver *CCIPReceiverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPReceiver.Contract.contract.Call(opts, result, method, params...) +} + +func (_CCIPReceiver *CCIPReceiverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReceiver.Contract.contract.Transfer(opts) +} + +func (_CCIPReceiver *CCIPReceiverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPReceiver.Contract.contract.Transact(opts, method, params...) +} + +func (_CCIPReceiver *CCIPReceiverCaller) GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) { + var out []interface{} + err := _CCIPReceiver.contract.Call(opts, &out, "getMessageContents", messageId) + + if err != nil { + return *new(ClientAny2EVMMessage), err + } + + out0 := *abi.ConvertType(out[0], new(ClientAny2EVMMessage)).(*ClientAny2EVMMessage) + + return out0, err + +} + +func (_CCIPReceiver *CCIPReceiverSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _CCIPReceiver.Contract.GetMessageContents(&_CCIPReceiver.CallOpts, messageId) +} + +func (_CCIPReceiver *CCIPReceiverCallerSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _CCIPReceiver.Contract.GetMessageContents(&_CCIPReceiver.CallOpts, messageId) +} + +func (_CCIPReceiver *CCIPReceiverCaller) GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) { + var out []interface{} + err := _CCIPReceiver.contract.Call(opts, &out, "getMessageStatus", messageId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_CCIPReceiver *CCIPReceiverSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _CCIPReceiver.Contract.GetMessageStatus(&_CCIPReceiver.CallOpts, messageId) +} + +func (_CCIPReceiver *CCIPReceiverCallerSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _CCIPReceiver.Contract.GetMessageStatus(&_CCIPReceiver.CallOpts, messageId) +} + +func (_CCIPReceiver *CCIPReceiverCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPReceiver.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPReceiver *CCIPReceiverSession) GetRouter() (common.Address, error) { + return _CCIPReceiver.Contract.GetRouter(&_CCIPReceiver.CallOpts) +} + +func (_CCIPReceiver *CCIPReceiverCallerSession) GetRouter() (common.Address, error) { + return _CCIPReceiver.Contract.GetRouter(&_CCIPReceiver.CallOpts) +} + +func (_CCIPReceiver *CCIPReceiverCaller) IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) { + var out []interface{} + err := _CCIPReceiver.contract.Call(opts, &out, "isApprovedSender", sourceChainSelector, senderAddr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_CCIPReceiver *CCIPReceiverSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _CCIPReceiver.Contract.IsApprovedSender(&_CCIPReceiver.CallOpts, sourceChainSelector, senderAddr) +} + +func (_CCIPReceiver *CCIPReceiverCallerSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _CCIPReceiver.Contract.IsApprovedSender(&_CCIPReceiver.CallOpts, sourceChainSelector, senderAddr) +} + +func (_CCIPReceiver *CCIPReceiverCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPReceiver.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPReceiver *CCIPReceiverSession) Owner() (common.Address, error) { + return _CCIPReceiver.Contract.Owner(&_CCIPReceiver.CallOpts) +} + +func (_CCIPReceiver *CCIPReceiverCallerSession) Owner() (common.Address, error) { + return _CCIPReceiver.Contract.Owner(&_CCIPReceiver.CallOpts) +} + +func (_CCIPReceiver *CCIPReceiverCaller) SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) { + var out []interface{} + err := _CCIPReceiver.contract.Call(opts, &out, "s_chains", arg0) + + outstruct := new(SChains) + if err != nil { + return *outstruct, err + } + + outstruct.Recipient = *abi.ConvertType(out[0], new([]byte)).(*[]byte) + outstruct.ExtraArgsBytes = *abi.ConvertType(out[1], new([]byte)).(*[]byte) + + return *outstruct, err + +} + +func (_CCIPReceiver *CCIPReceiverSession) SChains(arg0 uint64) (SChains, + + error) { + return _CCIPReceiver.Contract.SChains(&_CCIPReceiver.CallOpts, arg0) +} + +func (_CCIPReceiver *CCIPReceiverCallerSession) SChains(arg0 uint64) (SChains, + + error) { + return _CCIPReceiver.Contract.SChains(&_CCIPReceiver.CallOpts, arg0) +} + +func (_CCIPReceiver *CCIPReceiverCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _CCIPReceiver.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_CCIPReceiver *CCIPReceiverSession) TypeAndVersion() (string, error) { + return _CCIPReceiver.Contract.TypeAndVersion(&_CCIPReceiver.CallOpts) +} + +func (_CCIPReceiver *CCIPReceiverCallerSession) TypeAndVersion() (string, error) { + return _CCIPReceiver.Contract.TypeAndVersion(&_CCIPReceiver.CallOpts) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "acceptOwnership") +} + +func (_CCIPReceiver *CCIPReceiverSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPReceiver.Contract.AcceptOwnership(&_CCIPReceiver.TransactOpts) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPReceiver.Contract.AcceptOwnership(&_CCIPReceiver.TransactOpts) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "ccipReceive", message) +} + +func (_CCIPReceiver *CCIPReceiverSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiver.Contract.CcipReceive(&_CCIPReceiver.TransactOpts, message) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiver.Contract.CcipReceive(&_CCIPReceiver.TransactOpts, message) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "disableChain", chainSelector) +} + +func (_CCIPReceiver *CCIPReceiverSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _CCIPReceiver.Contract.DisableChain(&_CCIPReceiver.TransactOpts, chainSelector) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _CCIPReceiver.Contract.DisableChain(&_CCIPReceiver.TransactOpts, chainSelector) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "enableChain", chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPReceiver *CCIPReceiverSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPReceiver.Contract.EnableChain(&_CCIPReceiver.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPReceiver.Contract.EnableChain(&_CCIPReceiver.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "processMessage", message) +} + +func (_CCIPReceiver *CCIPReceiverSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiver.Contract.ProcessMessage(&_CCIPReceiver.TransactOpts, message) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiver.Contract.ProcessMessage(&_CCIPReceiver.TransactOpts, message) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "retryFailedMessage", messageId) +} + +func (_CCIPReceiver *CCIPReceiverSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _CCIPReceiver.Contract.RetryFailedMessage(&_CCIPReceiver.TransactOpts, messageId) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _CCIPReceiver.Contract.RetryFailedMessage(&_CCIPReceiver.TransactOpts, messageId) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "setSimRevert", simRevert) +} + +func (_CCIPReceiver *CCIPReceiverSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _CCIPReceiver.Contract.SetSimRevert(&_CCIPReceiver.TransactOpts, simRevert) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _CCIPReceiver.Contract.SetSimRevert(&_CCIPReceiver.TransactOpts, simRevert) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "transferOwnership", to) +} + +func (_CCIPReceiver *CCIPReceiverSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPReceiver.Contract.TransferOwnership(&_CCIPReceiver.TransactOpts, to) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPReceiver.Contract.TransferOwnership(&_CCIPReceiver.TransactOpts, to) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "updateApprovedSenders", adds, removes) +} + +func (_CCIPReceiver *CCIPReceiverSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPReceiver.Contract.UpdateApprovedSenders(&_CCIPReceiver.TransactOpts, adds, removes) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPReceiver.Contract.UpdateApprovedSenders(&_CCIPReceiver.TransactOpts, adds, removes) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "withdrawNativeToken", to, amount) +} + +func (_CCIPReceiver *CCIPReceiverSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiver.Contract.WithdrawNativeToken(&_CCIPReceiver.TransactOpts, to, amount) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiver.Contract.WithdrawNativeToken(&_CCIPReceiver.TransactOpts, to, amount) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiver.contract.Transact(opts, "withdrawTokens", token, to, amount) +} + +func (_CCIPReceiver *CCIPReceiverSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiver.Contract.WithdrawTokens(&_CCIPReceiver.TransactOpts, token, to, amount) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiver.Contract.WithdrawTokens(&_CCIPReceiver.TransactOpts, token, to, amount) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _CCIPReceiver.contract.RawTransact(opts, calldata) +} + +func (_CCIPReceiver *CCIPReceiverSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _CCIPReceiver.Contract.Fallback(&_CCIPReceiver.TransactOpts, calldata) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _CCIPReceiver.Contract.Fallback(&_CCIPReceiver.TransactOpts, calldata) +} + +func (_CCIPReceiver *CCIPReceiverTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReceiver.contract.RawTransact(opts, nil) +} + +func (_CCIPReceiver *CCIPReceiverSession) Receive() (*types.Transaction, error) { + return _CCIPReceiver.Contract.Receive(&_CCIPReceiver.TransactOpts) +} + +func (_CCIPReceiver *CCIPReceiverTransactorSession) Receive() (*types.Transaction, error) { + return _CCIPReceiver.Contract.Receive(&_CCIPReceiver.TransactOpts) +} + +type CCIPReceiverMessageFailedIterator struct { + Event *CCIPReceiverMessageFailed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverMessageFailedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverMessageFailed) + 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(CCIPReceiverMessageFailed) + 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 *CCIPReceiverMessageFailedIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverMessageFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverMessageFailed struct { + MessageId [32]byte + Reason []byte + Raw types.Log +} + +func (_CCIPReceiver *CCIPReceiverFilterer) FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverMessageFailedIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiver.contract.FilterLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return &CCIPReceiverMessageFailedIterator{contract: _CCIPReceiver.contract, event: "MessageFailed", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiver *CCIPReceiverFilterer) WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *CCIPReceiverMessageFailed, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiver.contract.WatchLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverMessageFailed) + if err := _CCIPReceiver.contract.UnpackLog(event, "MessageFailed", 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 (_CCIPReceiver *CCIPReceiverFilterer) ParseMessageFailed(log types.Log) (*CCIPReceiverMessageFailed, error) { + event := new(CCIPReceiverMessageFailed) + if err := _CCIPReceiver.contract.UnpackLog(event, "MessageFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverMessageRecoveredIterator struct { + Event *CCIPReceiverMessageRecovered + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverMessageRecoveredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverMessageRecovered) + 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(CCIPReceiverMessageRecovered) + 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 *CCIPReceiverMessageRecoveredIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverMessageRecoveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverMessageRecovered struct { + MessageId [32]byte + Raw types.Log +} + +func (_CCIPReceiver *CCIPReceiverFilterer) FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverMessageRecoveredIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiver.contract.FilterLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return &CCIPReceiverMessageRecoveredIterator{contract: _CCIPReceiver.contract, event: "MessageRecovered", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiver *CCIPReceiverFilterer) WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *CCIPReceiverMessageRecovered, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiver.contract.WatchLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverMessageRecovered) + if err := _CCIPReceiver.contract.UnpackLog(event, "MessageRecovered", 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 (_CCIPReceiver *CCIPReceiverFilterer) ParseMessageRecovered(log types.Log) (*CCIPReceiverMessageRecovered, error) { + event := new(CCIPReceiverMessageRecovered) + if err := _CCIPReceiver.contract.UnpackLog(event, "MessageRecovered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverMessageSucceededIterator struct { + Event *CCIPReceiverMessageSucceeded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverMessageSucceededIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverMessageSucceeded) + 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(CCIPReceiverMessageSucceeded) + 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 *CCIPReceiverMessageSucceededIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverMessageSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverMessageSucceeded struct { + MessageId [32]byte + Raw types.Log +} + +func (_CCIPReceiver *CCIPReceiverFilterer) FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverMessageSucceededIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiver.contract.FilterLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return &CCIPReceiverMessageSucceededIterator{contract: _CCIPReceiver.contract, event: "MessageSucceeded", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiver *CCIPReceiverFilterer) WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *CCIPReceiverMessageSucceeded, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiver.contract.WatchLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverMessageSucceeded) + if err := _CCIPReceiver.contract.UnpackLog(event, "MessageSucceeded", 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 (_CCIPReceiver *CCIPReceiverFilterer) ParseMessageSucceeded(log types.Log) (*CCIPReceiverMessageSucceeded, error) { + event := new(CCIPReceiverMessageSucceeded) + if err := _CCIPReceiver.contract.UnpackLog(event, "MessageSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverOwnershipTransferRequestedIterator struct { + Event *CCIPReceiverOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverOwnershipTransferRequested) + 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(CCIPReceiverOwnershipTransferRequested) + 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 *CCIPReceiverOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPReceiver *CCIPReceiverFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPReceiverOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPReceiver.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPReceiverOwnershipTransferRequestedIterator{contract: _CCIPReceiver.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiver *CCIPReceiverFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPReceiverOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPReceiver.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverOwnershipTransferRequested) + if err := _CCIPReceiver.contract.UnpackLog(event, "OwnershipTransferRequested", 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 (_CCIPReceiver *CCIPReceiverFilterer) ParseOwnershipTransferRequested(log types.Log) (*CCIPReceiverOwnershipTransferRequested, error) { + event := new(CCIPReceiverOwnershipTransferRequested) + if err := _CCIPReceiver.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverOwnershipTransferredIterator struct { + Event *CCIPReceiverOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverOwnershipTransferred) + 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(CCIPReceiverOwnershipTransferred) + 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 *CCIPReceiverOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPReceiver *CCIPReceiverFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPReceiverOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPReceiver.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPReceiverOwnershipTransferredIterator{contract: _CCIPReceiver.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiver *CCIPReceiverFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPReceiverOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPReceiver.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverOwnershipTransferred) + if err := _CCIPReceiver.contract.UnpackLog(event, "OwnershipTransferred", 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 (_CCIPReceiver *CCIPReceiverFilterer) ParseOwnershipTransferred(log types.Log) (*CCIPReceiverOwnershipTransferred, error) { + event := new(CCIPReceiverOwnershipTransferred) + if err := _CCIPReceiver.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SChains struct { + Recipient []byte + ExtraArgsBytes []byte +} + +func (_CCIPReceiver *CCIPReceiver) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _CCIPReceiver.abi.Events["MessageFailed"].ID: + return _CCIPReceiver.ParseMessageFailed(log) + case _CCIPReceiver.abi.Events["MessageRecovered"].ID: + return _CCIPReceiver.ParseMessageRecovered(log) + case _CCIPReceiver.abi.Events["MessageSucceeded"].ID: + return _CCIPReceiver.ParseMessageSucceeded(log) + case _CCIPReceiver.abi.Events["OwnershipTransferRequested"].ID: + return _CCIPReceiver.ParseOwnershipTransferRequested(log) + case _CCIPReceiver.abi.Events["OwnershipTransferred"].ID: + return _CCIPReceiver.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (CCIPReceiverMessageFailed) Topic() common.Hash { + return common.HexToHash("0x55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f") +} + +func (CCIPReceiverMessageRecovered) Topic() common.Hash { + return common.HexToHash("0xef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad") +} + +func (CCIPReceiverMessageSucceeded) Topic() common.Hash { + return common.HexToHash("0xdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f") +} + +func (CCIPReceiverOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (CCIPReceiverOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_CCIPReceiver *CCIPReceiver) Address() common.Address { + return _CCIPReceiver.address +} + +type CCIPReceiverInterface interface { + GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) + + GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) + + EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) + + ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) + + SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) + + WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) + + WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + + Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverMessageFailedIterator, error) + + WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *CCIPReceiverMessageFailed, messageId [][32]byte) (event.Subscription, error) + + ParseMessageFailed(log types.Log) (*CCIPReceiverMessageFailed, error) + + FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverMessageRecoveredIterator, error) + + WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *CCIPReceiverMessageRecovered, messageId [][32]byte) (event.Subscription, error) + + ParseMessageRecovered(log types.Log) (*CCIPReceiverMessageRecovered, error) + + FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverMessageSucceededIterator, error) + + WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *CCIPReceiverMessageSucceeded, messageId [][32]byte) (event.Subscription, error) + + ParseMessageSucceeded(log types.Log) (*CCIPReceiverMessageSucceeded, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPReceiverOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPReceiverOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*CCIPReceiverOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPReceiverOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPReceiverOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*CCIPReceiverOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} diff --git a/core/gethwrappers/ccip/generated/ccipReceiverWithAck/ccipReceiverWithAck.go b/core/gethwrappers/ccip/generated/ccipReceiverWithAck/ccipReceiverWithAck.go new file mode 100644 index 0000000000..f695b20319 --- /dev/null +++ b/core/gethwrappers/ccip/generated/ccipReceiverWithAck/ccipReceiverWithAck.go @@ -0,0 +1,1927 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ccipReceiverWithAck + +import ( + "errors" + "fmt" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "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 ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type ICCIPClientBaseapprovedSenderUpdate struct { + DestChainSelector uint64 + Sender []byte +} + +var CCIPReceiverWithAckMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrorCase\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMagicBytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ACKMESSAGEMAGICBYTES\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"disableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"enableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"s_chains\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"simRevert\",\"type\":\"bool\"}],\"name\":\"setSimRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162003c7a38038062003c7a8339810160408190526200003491620005c4565b818033806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c0816200013c565b5050506001600160a01b038116620000eb576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0390811660805260078054610100600160a81b0319166101009285169283021790551590506200013457620001346001600160a01b03821683600019620001e7565b5050620006c1565b336001600160a01b03821603620001965760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b801580620002655750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156200023d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000263919062000603565b155b620002d95760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000084565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003319185916200033616565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000385906001600160a01b03851690849062000407565b805190915015620003315780806020019051810190620003a691906200061d565b620003315760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000084565b606062000418848460008562000420565b949350505050565b606082471015620004835760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000084565b600080866001600160a01b03168587604051620004a191906200066e565b60006040518083038185875af1925050503d8060008114620004e0576040519150601f19603f3d011682016040523d82523d6000602084013e620004e5565b606091505b509092509050620004f98783838762000504565b979650505050505050565b606083156200057857825160000362000570576001600160a01b0385163b620005705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000084565b508162000418565b6200041883838151156200058f5781518083602001fd5b8060405162461bcd60e51b81526004016200008491906200068c565b6001600160a01b0381168114620005c157600080fd5b50565b60008060408385031215620005d857600080fd5b8251620005e581620005ab565b6020840151909250620005f881620005ab565b809150509250929050565b6000602082840312156200061657600080fd5b5051919050565b6000602082840312156200063057600080fd5b815180151581146200064157600080fd5b9392505050565b60005b83811015620006655781810151838201526020016200064b565b50506000910152565b600082516200068281846020870162000648565b9190910192915050565b6020815260008251806020840152620006ad81604085016020870162000648565b601f01601f19169190910160400192915050565b60805161357a6200070060003960008181610451015281816105a10152818161063f01528181610dfd01528181611c450152611d11015261357a6000f3fe6080604052600436106101615760003560e01c80636939cd97116100bf578063b0f479a111610079578063e4ca875411610056578063e4ca8754146104b5578063f2fde38b146104d5578063ff2deec3146104f557005b8063b0f479a114610442578063cf6730f814610475578063d8469e401461049557005b80638462a2b9116100a75780638462a2b9146103b657806385572ffb146103d65780638da5cb5b146103f657005b80636939cd971461037457806379ba5097146103a157005b806341eade461161011b578063536c6bfa116100f8578063536c6bfa146103065780635dc5ebdb146103265780635e35359e1461035457005b806341eade46146102985780635075a9d4146102b857806352f813c3146102e657005b806311e85dff1161014957806311e85dff146101e0578063181f5a77146102005780633a51b79e1461024f57005b806305bfe9821461016a5780630e958d6b146101b057005b3661016857005b005b34801561017657600080fd5b5061019a610185366004612541565b60086020526000908152604090205460ff1681565b6040516101a79190612589565b60405180910390f35b3480156101bc57600080fd5b506101d06101cb366004612629565b610527565b60405190151581526020016101a7565b3480156101ec57600080fd5b506101686101fb3660046126a0565b610571565b34801561020c57600080fd5b5060408051808201909152601d81527f4343495052656365697665725769746841434b20312e302e302d64657600000060208201525b6040516101a7919061272b565b34801561025b57600080fd5b506102426040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b3480156102a457600080fd5b506101686102b336600461273e565b610701565b3480156102c457600080fd5b506102d86102d3366004612541565b610740565b6040519081526020016101a7565b3480156102f257600080fd5b50610168610301366004612769565b610753565b34801561031257600080fd5b50610168610321366004612786565b61078c565b34801561033257600080fd5b5061034661034136600461273e565b6107a2565b6040516101a79291906127b2565b34801561036057600080fd5b5061016861036f3660046127e0565b6108ce565b34801561038057600080fd5b5061039461038f366004612541565b6108f7565b6040516101a7919061287e565b3480156103ad57600080fd5b50610168610b02565b3480156103c257600080fd5b506101686103d1366004612957565b610c04565b3480156103e257600080fd5b506101686103f13660046129c3565b610de5565b34801561040257600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b34801561044e57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061041d565b34801561048157600080fd5b506101686104903660046129c3565b6110d5565b3480156104a157600080fd5b506101686104b03660046129fe565b6112f2565b3480156104c157600080fd5b506101686104d0366004612541565b611354565b3480156104e157600080fd5b506101686104f03660046126a0565b6115d2565b34801561050157600080fd5b5060075461041d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff8316600090815260026020819052604080832090519101906105559085908590612a81565b9081526040519081900360200190205460ff1690509392505050565b6105796115e6565b600754610100900473ffffffffffffffffffffffffffffffffffffffff16156105e6576105e67f0000000000000000000000000000000000000000000000000000000000000000600754610100900473ffffffffffffffffffffffffffffffffffffffff16906000611669565b6007805473ffffffffffffffffffffffffffffffffffffffff8381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff851617909455929091041690156106a3576106a37f0000000000000000000000000000000000000000000000000000000000000000600754610100900473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611669565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b6107096115e6565b67ffffffffffffffff811660009081526002602052604081209061072d82826124f3565b61073b6001830160006124f3565b505050565b600061074d600483611869565b92915050565b61075b6115e6565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6107946115e6565b61079e828261187c565b5050565b6002602052600090815260409020805481906107bd90612a91565b80601f01602080910402602001604051908101604052809291908181526020018280546107e990612a91565b80156108365780601f1061080b57610100808354040283529160200191610836565b820191906000526020600020905b81548152906001019060200180831161081957829003601f168201915b50505050509080600101805461084b90612a91565b80601f016020809104026020016040519081016040528092919081815260200182805461087790612a91565b80156108c45780601f10610899576101008083540402835291602001916108c4565b820191906000526020600020905b8154815290600101906020018083116108a757829003601f168201915b5050505050905082565b6108d66115e6565b61073b73ffffffffffffffffffffffffffffffffffffffff841683836119d6565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260038152908490208451928301855280548352600181015467ffffffffffffffff169183019190915260028101805493949293919284019161096690612a91565b80601f016020809104026020016040519081016040528092919081815260200182805461099290612a91565b80156109df5780601f106109b4576101008083540402835291602001916109df565b820191906000526020600020905b8154815290600101906020018083116109c257829003601f168201915b505050505081526020016003820180546109f890612a91565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2490612a91565b8015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610af45760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610a9f565b505050915250909392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610c0c6115e6565b60005b81811015610cef5760026000848484818110610c2d57610c2d612ae4565b9050602002810190610c3f9190612b13565b610c4d90602081019061273e565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610c8457610c84612ae4565b9050602002810190610c969190612b13565b610ca4906020810190612b51565b604051610cb2929190612a81565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600101610c0f565b5060005b83811015610dde57600160026000878785818110610d1357610d13612ae4565b9050602002810190610d259190612b13565b610d3390602081019061273e565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610d6a57610d6a612ae4565b9050602002810190610d7c9190612b13565b610d8a906020810190612b51565b604051610d98929190612a81565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055600101610cf3565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e56576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610b7f565b610e66604082016020830161273e565b610e736040830183612b51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260026020819052604091829020915191019350610ed09250849150612bb6565b9081526040519081900360200190205460ff16610f1b57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610b7f919061272b565b610f2b604084016020850161273e565b67ffffffffffffffff811660009081526002602052604090208054610f4f90612a91565b9050600003610f96576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610b7f565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890610fd2908790600401612cca565b600060405180830381600087803b158015610fec57600080fd5b505af1925050508015610ffd575060015b6110a2573d80801561102b576040519150601f19603f3d011682016040523d82523d6000602084013e611030565b606091505b50611042853560015b60049190611a2c565b5084356000908152600360205260409020859061105f82826130cb565b50506040518535907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f9061109490849061272b565b60405180910390a2506110cf565b6040518435907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b50505050565b33301461110e576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061111d6060830183612b51565b81019061112a91906132d9565b90506000816040015160018111156111445761114461255a565b036111525761079e82611a41565b60018160400151600181111561116a5761116a61255a565b0361079e57600080826020015180602001905181019061118a9190613385565b60408051808201909152601581527f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000060209182015282519083012091935091507f1c778f21871bcc06cfebd177c4d0360c2f3550962fb071f69ed007e4f55f23b214611222576040517f9f0b03b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008281526008602052604090205460ff1660028111156112475761124761255a565b03611281576040517f33704b2800000000000000000000000000000000000000000000000000000000815260048101829052602401610b7f565b60008181526008602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600217905590518281527fef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79910160405180910390a150505050565b6112fa6115e6565b67ffffffffffffffff8516600090815260026020526040902061131e848683612e4f565b508015610dde5767ffffffffffffffff8516600090815260026020526040902060010161134c828483612e4f565b505050505050565b61135c6115e6565b6001611369600483611869565b146113a3576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610b7f565b6113ae816000611039565b506000818152600360209081526040808320815160a08101835281548152600182015467ffffffffffffffff169381019390935260028101805491928401916113f690612a91565b80601f016020809104026020016040519081016040528092919081815260200182805461142290612a91565b801561146f5780601f106114445761010080835404028352916020019161146f565b820191906000526020600020905b81548152906001019060200180831161145257829003601f168201915b5050505050815260200160038201805461148890612a91565b80601f01602080910402602001604051908101604052809291908181526020018280546114b490612a91565b80156115015780601f106114d657610100808354040283529160200191611501565b820191906000526020600020905b8154815290600101906020018083116114e457829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156115845760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff16825260019081015482840152908352909201910161152f565b5050505081525050905061159781611df7565b6115a2600483611e9d565b5060405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b6115da6115e6565b6115e381611ea9565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610b7f565b565b80158061170957506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156116e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117079190613406565b155b611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610b7f565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261073b9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f9e565b600061187583836120aa565b9392505050565b804710156118e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b7f565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611940576040519150601f19603f3d011682016040523d82523d6000602084013e611945565b606091505b505090508061073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b7f565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261073b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016117e7565b6000611a39848484612134565b949350505050565b6040805160008082526020820190925281611a7e565b6040805180820190915260008082526020820152815260200190600190039081611a575790505b50905060006040518060a00160405280848060400190611a9e9190612b51565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080518082018252601581527f4d4553534147455f41434b4e4f574c45444745445f0000000000000000000000602082810191909152915192820192611b1f928835910161341f565b6040516020818303038152906040528152602001838152602001600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160026000866020016020810190611b8e919061273e565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206001018054611bbe90612a91565b80601f0160208091040260200160405190810160405280929190818152602001828054611bea90612a91565b8015611c375780601f10611c0c57610100808354040283529160200191611c37565b820191906000526020600020905b815481529060010190602001808311611c1a57829003601f168201915b5050505050815250905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166320487ded856020016020810190611c92919061273e565b846040518363ffffffff1660e01b8152600401611cb0929190613441565b602060405180830381865afa158015611ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf19190613406565b60075490915060009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116916396f4e9f9916101009091041615611d4c576000611d4e565b835b611d5e6040890160208a0161273e565b866040518463ffffffff1660e01b8152600401611d7c929190613441565b60206040518083038185885af1158015611d9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611dbf9190613406565b60405190915081908635907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b237290600090a35050505050565b60005b81608001515181101561079e57600082608001518281518110611e1f57611e1f612ae4565b6020026020010151602001519050600083608001518381518110611e4557611e45612ae4565b6020026020010151600001519050611e93611e7560005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff831690846119d6565b5050600101611dfa565b60006118758383612151565b3373ffffffffffffffffffffffffffffffffffffffff821603611f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610b7f565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612000826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661216e9092919063ffffffff16565b80519091501561073b578080602001905181019061201e919061350e565b61073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b7f565b6000818152600283016020526040812054801515806120ce57506120ce848461217d565b611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610b7f565b60008281526002840160205260408120829055611a398484612189565b600081815260028301602052604081208190556118758383612195565b6060611a3984846000856121a1565b600061187583836122ba565b600061187583836122d2565b60006118758383612321565b606082471015612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b7f565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161225c9190612bb6565b60006040518083038185875af1925050503d8060008114612299576040519150601f19603f3d011682016040523d82523d6000602084013e61229e565b606091505b50915091506122af87838387612414565b979650505050505050565b60008181526001830160205260408120541515611875565b60008181526001830160205260408120546123195750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561074d565b50600061074d565b6000818152600183016020526040812054801561240a57600061234560018361352b565b85549091506000906123599060019061352b565b90508181146123be57600086600001828154811061237957612379612ae4565b906000526020600020015490508087600001848154811061239c5761239c612ae4565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806123cf576123cf61353e565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061074d565b600091505061074d565b606083156124aa5782516000036124a35773ffffffffffffffffffffffffffffffffffffffff85163b6124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b7f565b5081611a39565b611a3983838151156124bf5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f919061272b565b5080546124ff90612a91565b6000825580601f1061250f575050565b601f0160209004906000526020600020908101906115e391905b8082111561253d5760008155600101612529565b5090565b60006020828403121561255357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106125c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff811681146115e357600080fd5b60008083601f8401126125f257600080fd5b50813567ffffffffffffffff81111561260a57600080fd5b60208301915083602082850101111561262257600080fd5b9250929050565b60008060006040848603121561263e57600080fd5b8335612649816125ca565b9250602084013567ffffffffffffffff81111561266557600080fd5b612671868287016125e0565b9497909650939450505050565b73ffffffffffffffffffffffffffffffffffffffff811681146115e357600080fd5b6000602082840312156126b257600080fd5b81356118758161267e565b60005b838110156126d85781810151838201526020016126c0565b50506000910152565b600081518084526126f98160208601602086016126bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061187560208301846126e1565b60006020828403121561275057600080fd5b8135611875816125ca565b80151581146115e357600080fd5b60006020828403121561277b57600080fd5b81356118758161275b565b6000806040838503121561279957600080fd5b82356127a48161267e565b946020939093013593505050565b6040815260006127c560408301856126e1565b82810360208401526127d781856126e1565b95945050505050565b6000806000606084860312156127f557600080fd5b83356128008161267e565b925060208401356128108161267e565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015612873578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101612836565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a060608401526128b860c08401826126e1565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526128f483836126e1565b925060808601519150808584030160a0860152506127d78282612821565b60008083601f84011261292457600080fd5b50813567ffffffffffffffff81111561293c57600080fd5b6020830191508360208260051b850101111561262257600080fd5b6000806000806040858703121561296d57600080fd5b843567ffffffffffffffff8082111561298557600080fd5b61299188838901612912565b909650945060208701359150808211156129aa57600080fd5b506129b787828801612912565b95989497509550505050565b6000602082840312156129d557600080fd5b813567ffffffffffffffff8111156129ec57600080fd5b820160a0818503121561187557600080fd5b600080600080600060608688031215612a1657600080fd5b8535612a21816125ca565b9450602086013567ffffffffffffffff80821115612a3e57600080fd5b612a4a89838a016125e0565b90965094506040880135915080821115612a6357600080fd5b50612a70888289016125e0565b969995985093965092949392505050565b8183823760009101908152919050565b600181811c90821680612aa557607f821691505b602082108103612ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612b4757600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b8657600080fd5b83018035915067ffffffffffffffff821115612ba157600080fd5b60200191503681900382131561262257600080fd5b60008251612b478184602087016126bd565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612bfd57600080fd5b830160208101925035905067ffffffffffffffff811115612c1d57600080fd5b80360382131561262257600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612873578135612c988161267e565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101612c85565b602081528135602082015260006020830135612ce5816125ca565b67ffffffffffffffff8082166040850152612d036040860186612bc8565b925060a06060860152612d1a60c086018483612c2c565b925050612d2a6060860186612bc8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152612d60858385612c2c565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312612d9957600080fd5b60209288019283019235915083821115612db257600080fd5b8160061b3603831315612dc457600080fd5b8685030160a08701526122af848284612c75565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561073b576000816000526020600020601f850160051c81016020861015612e305750805b601f850160051c820191505b8181101561134c57828155600101612e3c565b67ffffffffffffffff831115612e6757612e67612dd8565b612e7b83612e758354612a91565b83612e07565b6000601f841160018114612ecd5760008515612e975750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610dde565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015612f1c5786850135825560209485019460019092019101612efc565b5086821015612f57577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8135612fa38161267e565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b6801000000000000000083111561300957613009612dd8565b8054838255808410156130965760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461304a5761304a612f69565b808616861461305b5761305b612f69565b5060008360005260206000208360011b81018760011b820191505b80821015613091578282558284830155600282019150613076565b505050505b5060008181526020812083915b8581101561134c576130b58383612f98565b60409290920191600291909101906001016130a3565b813581556001810160208301356130e1816125ca565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556131216040860186612b51565b93509150613133838360028701612e4f565b6131406060860186612b51565b93509150613152838360038701612e4f565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261318957600080fd5b91840191823591508082111561319e57600080fd5b506020820191508060061b36038213156131b757600080fd5b6110cf818360048601612ff0565b6040516060810167ffffffffffffffff811182821017156131e8576131e8612dd8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561323557613235612dd8565b604052919050565b600067ffffffffffffffff82111561325757613257612dd8565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261329457600080fd5b81356132a76132a28261323d565b6131ee565b8181528460208386010111156132bc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156132eb57600080fd5b813567ffffffffffffffff8082111561330357600080fd5b908301906060828603121561331757600080fd5b61331f6131c5565b82358281111561332e57600080fd5b61333a87828601613283565b82525060208301358281111561334f57600080fd5b61335b87828601613283565b602083015250604083013592506002831061337557600080fd5b6040810192909252509392505050565b6000806040838503121561339857600080fd5b825167ffffffffffffffff8111156133af57600080fd5b8301601f810185136133c057600080fd5b80516133ce6132a28261323d565b8181528660208385010111156133e357600080fd5b6133f48260208301602086016126bd565b60209590950151949694955050505050565b60006020828403121561341857600080fd5b5051919050565b60408152600061343260408301856126e1565b90508260208301529392505050565b67ffffffffffffffff83168152604060208201526000825160a0604084015261346d60e08401826126e1565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808584030160608601526134a983836126e1565b925060408601519150808584030160808601526134c68383612821565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c08601525061350482826126e1565b9695505050505050565b60006020828403121561352057600080fd5b81516118758161275b565b8181038181111561074d5761074d612f69565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", +} + +var CCIPReceiverWithAckABI = CCIPReceiverWithAckMetaData.ABI + +var CCIPReceiverWithAckBin = CCIPReceiverWithAckMetaData.Bin + +func DeployCCIPReceiverWithAck(auth *bind.TransactOpts, backend bind.ContractBackend, router common.Address, feeToken common.Address) (common.Address, *types.Transaction, *CCIPReceiverWithAck, error) { + parsed, err := CCIPReceiverWithAckMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CCIPReceiverWithAckBin), backend, router, feeToken) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &CCIPReceiverWithAck{address: address, abi: *parsed, CCIPReceiverWithAckCaller: CCIPReceiverWithAckCaller{contract: contract}, CCIPReceiverWithAckTransactor: CCIPReceiverWithAckTransactor{contract: contract}, CCIPReceiverWithAckFilterer: CCIPReceiverWithAckFilterer{contract: contract}}, nil +} + +type CCIPReceiverWithAck struct { + address common.Address + abi abi.ABI + CCIPReceiverWithAckCaller + CCIPReceiverWithAckTransactor + CCIPReceiverWithAckFilterer +} + +type CCIPReceiverWithAckCaller struct { + contract *bind.BoundContract +} + +type CCIPReceiverWithAckTransactor struct { + contract *bind.BoundContract +} + +type CCIPReceiverWithAckFilterer struct { + contract *bind.BoundContract +} + +type CCIPReceiverWithAckSession struct { + Contract *CCIPReceiverWithAck + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type CCIPReceiverWithAckCallerSession struct { + Contract *CCIPReceiverWithAckCaller + CallOpts bind.CallOpts +} + +type CCIPReceiverWithAckTransactorSession struct { + Contract *CCIPReceiverWithAckTransactor + TransactOpts bind.TransactOpts +} + +type CCIPReceiverWithAckRaw struct { + Contract *CCIPReceiverWithAck +} + +type CCIPReceiverWithAckCallerRaw struct { + Contract *CCIPReceiverWithAckCaller +} + +type CCIPReceiverWithAckTransactorRaw struct { + Contract *CCIPReceiverWithAckTransactor +} + +func NewCCIPReceiverWithAck(address common.Address, backend bind.ContractBackend) (*CCIPReceiverWithAck, error) { + abi, err := abi.JSON(strings.NewReader(CCIPReceiverWithAckABI)) + if err != nil { + return nil, err + } + contract, err := bindCCIPReceiverWithAck(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAck{address: address, abi: abi, CCIPReceiverWithAckCaller: CCIPReceiverWithAckCaller{contract: contract}, CCIPReceiverWithAckTransactor: CCIPReceiverWithAckTransactor{contract: contract}, CCIPReceiverWithAckFilterer: CCIPReceiverWithAckFilterer{contract: contract}}, nil +} + +func NewCCIPReceiverWithAckCaller(address common.Address, caller bind.ContractCaller) (*CCIPReceiverWithAckCaller, error) { + contract, err := bindCCIPReceiverWithAck(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckCaller{contract: contract}, nil +} + +func NewCCIPReceiverWithAckTransactor(address common.Address, transactor bind.ContractTransactor) (*CCIPReceiverWithAckTransactor, error) { + contract, err := bindCCIPReceiverWithAck(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckTransactor{contract: contract}, nil +} + +func NewCCIPReceiverWithAckFilterer(address common.Address, filterer bind.ContractFilterer) (*CCIPReceiverWithAckFilterer, error) { + contract, err := bindCCIPReceiverWithAck(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckFilterer{contract: contract}, nil +} + +func bindCCIPReceiverWithAck(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CCIPReceiverWithAckMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPReceiverWithAck.Contract.CCIPReceiverWithAckCaller.contract.Call(opts, result, method, params...) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.CCIPReceiverWithAckTransactor.contract.Transfer(opts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.CCIPReceiverWithAckTransactor.contract.Transact(opts, method, params...) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPReceiverWithAck.Contract.contract.Call(opts, result, method, params...) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.contract.Transfer(opts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.contract.Transact(opts, method, params...) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) ACKMESSAGEMAGICBYTES(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "ACKMESSAGEMAGICBYTES") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) ACKMESSAGEMAGICBYTES() ([]byte, error) { + return _CCIPReceiverWithAck.Contract.ACKMESSAGEMAGICBYTES(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) ACKMESSAGEMAGICBYTES() ([]byte, error) { + return _CCIPReceiverWithAck.Contract.ACKMESSAGEMAGICBYTES(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "getMessageContents", messageId) + + if err != nil { + return *new(ClientAny2EVMMessage), err + } + + out0 := *abi.ConvertType(out[0], new(ClientAny2EVMMessage)).(*ClientAny2EVMMessage) + + return out0, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _CCIPReceiverWithAck.Contract.GetMessageContents(&_CCIPReceiverWithAck.CallOpts, messageId) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _CCIPReceiverWithAck.Contract.GetMessageContents(&_CCIPReceiverWithAck.CallOpts, messageId) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "getMessageStatus", messageId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _CCIPReceiverWithAck.Contract.GetMessageStatus(&_CCIPReceiverWithAck.CallOpts, messageId) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _CCIPReceiverWithAck.Contract.GetMessageStatus(&_CCIPReceiverWithAck.CallOpts, messageId) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) GetRouter() (common.Address, error) { + return _CCIPReceiverWithAck.Contract.GetRouter(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) GetRouter() (common.Address, error) { + return _CCIPReceiverWithAck.Contract.GetRouter(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "isApprovedSender", sourceChainSelector, senderAddr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _CCIPReceiverWithAck.Contract.IsApprovedSender(&_CCIPReceiverWithAck.CallOpts, sourceChainSelector, senderAddr) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _CCIPReceiverWithAck.Contract.IsApprovedSender(&_CCIPReceiverWithAck.CallOpts, sourceChainSelector, senderAddr) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) Owner() (common.Address, error) { + return _CCIPReceiverWithAck.Contract.Owner(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) Owner() (common.Address, error) { + return _CCIPReceiverWithAck.Contract.Owner(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "s_chains", arg0) + + outstruct := new(SChains) + if err != nil { + return *outstruct, err + } + + outstruct.Recipient = *abi.ConvertType(out[0], new([]byte)).(*[]byte) + outstruct.ExtraArgsBytes = *abi.ConvertType(out[1], new([]byte)).(*[]byte) + + return *outstruct, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) SChains(arg0 uint64) (SChains, + + error) { + return _CCIPReceiverWithAck.Contract.SChains(&_CCIPReceiverWithAck.CallOpts, arg0) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) SChains(arg0 uint64) (SChains, + + error) { + return _CCIPReceiverWithAck.Contract.SChains(&_CCIPReceiverWithAck.CallOpts, arg0) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) SFeeToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "s_feeToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) SFeeToken() (common.Address, error) { + return _CCIPReceiverWithAck.Contract.SFeeToken(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) SFeeToken() (common.Address, error) { + return _CCIPReceiverWithAck.Contract.SFeeToken(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "s_messageStatus", messageId) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) SMessageStatus(messageId [32]byte) (uint8, error) { + return _CCIPReceiverWithAck.Contract.SMessageStatus(&_CCIPReceiverWithAck.CallOpts, messageId) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) SMessageStatus(messageId [32]byte) (uint8, error) { + return _CCIPReceiverWithAck.Contract.SMessageStatus(&_CCIPReceiverWithAck.CallOpts, messageId) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _CCIPReceiverWithAck.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) TypeAndVersion() (string, error) { + return _CCIPReceiverWithAck.Contract.TypeAndVersion(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckCallerSession) TypeAndVersion() (string, error) { + return _CCIPReceiverWithAck.Contract.TypeAndVersion(&_CCIPReceiverWithAck.CallOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "acceptOwnership") +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.AcceptOwnership(&_CCIPReceiverWithAck.TransactOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.AcceptOwnership(&_CCIPReceiverWithAck.TransactOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "ccipReceive", message) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.CcipReceive(&_CCIPReceiverWithAck.TransactOpts, message) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.CcipReceive(&_CCIPReceiverWithAck.TransactOpts, message) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "disableChain", chainSelector) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.DisableChain(&_CCIPReceiverWithAck.TransactOpts, chainSelector) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.DisableChain(&_CCIPReceiverWithAck.TransactOpts, chainSelector) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "enableChain", chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.EnableChain(&_CCIPReceiverWithAck.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.EnableChain(&_CCIPReceiverWithAck.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) ModifyFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "modifyFeeToken", token) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) ModifyFeeToken(token common.Address) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.ModifyFeeToken(&_CCIPReceiverWithAck.TransactOpts, token) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) ModifyFeeToken(token common.Address) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.ModifyFeeToken(&_CCIPReceiverWithAck.TransactOpts, token) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "processMessage", message) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.ProcessMessage(&_CCIPReceiverWithAck.TransactOpts, message) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.ProcessMessage(&_CCIPReceiverWithAck.TransactOpts, message) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "retryFailedMessage", messageId) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.RetryFailedMessage(&_CCIPReceiverWithAck.TransactOpts, messageId) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.RetryFailedMessage(&_CCIPReceiverWithAck.TransactOpts, messageId) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "setSimRevert", simRevert) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.SetSimRevert(&_CCIPReceiverWithAck.TransactOpts, simRevert) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.SetSimRevert(&_CCIPReceiverWithAck.TransactOpts, simRevert) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "transferOwnership", to) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.TransferOwnership(&_CCIPReceiverWithAck.TransactOpts, to) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.TransferOwnership(&_CCIPReceiverWithAck.TransactOpts, to) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "updateApprovedSenders", adds, removes) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.UpdateApprovedSenders(&_CCIPReceiverWithAck.TransactOpts, adds, removes) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.UpdateApprovedSenders(&_CCIPReceiverWithAck.TransactOpts, adds, removes) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "withdrawNativeToken", to, amount) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.WithdrawNativeToken(&_CCIPReceiverWithAck.TransactOpts, to, amount) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.WithdrawNativeToken(&_CCIPReceiverWithAck.TransactOpts, to, amount) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.Transact(opts, "withdrawTokens", token, to, amount) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.WithdrawTokens(&_CCIPReceiverWithAck.TransactOpts, token, to, amount) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.WithdrawTokens(&_CCIPReceiverWithAck.TransactOpts, token, to, amount) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.RawTransact(opts, calldata) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.Fallback(&_CCIPReceiverWithAck.TransactOpts, calldata) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.Fallback(&_CCIPReceiverWithAck.TransactOpts, calldata) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReceiverWithAck.contract.RawTransact(opts, nil) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckSession) Receive() (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.Receive(&_CCIPReceiverWithAck.TransactOpts) +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckTransactorSession) Receive() (*types.Transaction, error) { + return _CCIPReceiverWithAck.Contract.Receive(&_CCIPReceiverWithAck.TransactOpts) +} + +type CCIPReceiverWithAckFeeTokenModifiedIterator struct { + Event *CCIPReceiverWithAckFeeTokenModified + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverWithAckFeeTokenModifiedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverWithAckFeeTokenModified) + 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(CCIPReceiverWithAckFeeTokenModified) + 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 *CCIPReceiverWithAckFeeTokenModifiedIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverWithAckFeeTokenModifiedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverWithAckFeeTokenModified struct { + OldToken common.Address + NewToken common.Address + Raw types.Log +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) FilterFeeTokenModified(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*CCIPReceiverWithAckFeeTokenModifiedIterator, error) { + + var oldTokenRule []interface{} + for _, oldTokenItem := range oldToken { + oldTokenRule = append(oldTokenRule, oldTokenItem) + } + var newTokenRule []interface{} + for _, newTokenItem := range newToken { + newTokenRule = append(newTokenRule, newTokenItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.FilterLogs(opts, "FeeTokenModified", oldTokenRule, newTokenRule) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckFeeTokenModifiedIterator{contract: _CCIPReceiverWithAck.contract, event: "FeeTokenModified", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) WatchFeeTokenModified(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckFeeTokenModified, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) { + + var oldTokenRule []interface{} + for _, oldTokenItem := range oldToken { + oldTokenRule = append(oldTokenRule, oldTokenItem) + } + var newTokenRule []interface{} + for _, newTokenItem := range newToken { + newTokenRule = append(newTokenRule, newTokenItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.WatchLogs(opts, "FeeTokenModified", oldTokenRule, newTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverWithAckFeeTokenModified) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "FeeTokenModified", 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 (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) ParseFeeTokenModified(log types.Log) (*CCIPReceiverWithAckFeeTokenModified, error) { + event := new(CCIPReceiverWithAckFeeTokenModified) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "FeeTokenModified", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverWithAckMessageAckReceivedIterator struct { + Event *CCIPReceiverWithAckMessageAckReceived + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverWithAckMessageAckReceivedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverWithAckMessageAckReceived) + 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(CCIPReceiverWithAckMessageAckReceived) + 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 *CCIPReceiverWithAckMessageAckReceivedIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverWithAckMessageAckReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverWithAckMessageAckReceived struct { + Arg0 [32]byte + Raw types.Log +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) FilterMessageAckReceived(opts *bind.FilterOpts) (*CCIPReceiverWithAckMessageAckReceivedIterator, error) { + + logs, sub, err := _CCIPReceiverWithAck.contract.FilterLogs(opts, "MessageAckReceived") + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckMessageAckReceivedIterator{contract: _CCIPReceiverWithAck.contract, event: "MessageAckReceived", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageAckReceived) (event.Subscription, error) { + + logs, sub, err := _CCIPReceiverWithAck.contract.WatchLogs(opts, "MessageAckReceived") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverWithAckMessageAckReceived) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageAckReceived", 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 (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) ParseMessageAckReceived(log types.Log) (*CCIPReceiverWithAckMessageAckReceived, error) { + event := new(CCIPReceiverWithAckMessageAckReceived) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageAckReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverWithAckMessageAckSentIterator struct { + Event *CCIPReceiverWithAckMessageAckSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverWithAckMessageAckSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverWithAckMessageAckSent) + 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(CCIPReceiverWithAckMessageAckSent) + 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 *CCIPReceiverWithAckMessageAckSentIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverWithAckMessageAckSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverWithAckMessageAckSent struct { + IncomingMessageId [32]byte + Raw types.Log +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) FilterMessageAckSent(opts *bind.FilterOpts) (*CCIPReceiverWithAckMessageAckSentIterator, error) { + + logs, sub, err := _CCIPReceiverWithAck.contract.FilterLogs(opts, "MessageAckSent") + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckMessageAckSentIterator{contract: _CCIPReceiverWithAck.contract, event: "MessageAckSent", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageAckSent) (event.Subscription, error) { + + logs, sub, err := _CCIPReceiverWithAck.contract.WatchLogs(opts, "MessageAckSent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverWithAckMessageAckSent) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageAckSent", 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 (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) ParseMessageAckSent(log types.Log) (*CCIPReceiverWithAckMessageAckSent, error) { + event := new(CCIPReceiverWithAckMessageAckSent) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageAckSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverWithAckMessageFailedIterator struct { + Event *CCIPReceiverWithAckMessageFailed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverWithAckMessageFailedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverWithAckMessageFailed) + 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(CCIPReceiverWithAckMessageFailed) + 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 *CCIPReceiverWithAckMessageFailedIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverWithAckMessageFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverWithAckMessageFailed struct { + MessageId [32]byte + Reason []byte + Raw types.Log +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverWithAckMessageFailedIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.FilterLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckMessageFailedIterator{contract: _CCIPReceiverWithAck.contract, event: "MessageFailed", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageFailed, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.WatchLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverWithAckMessageFailed) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageFailed", 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 (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) ParseMessageFailed(log types.Log) (*CCIPReceiverWithAckMessageFailed, error) { + event := new(CCIPReceiverWithAckMessageFailed) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverWithAckMessageRecoveredIterator struct { + Event *CCIPReceiverWithAckMessageRecovered + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverWithAckMessageRecoveredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverWithAckMessageRecovered) + 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(CCIPReceiverWithAckMessageRecovered) + 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 *CCIPReceiverWithAckMessageRecoveredIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverWithAckMessageRecoveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverWithAckMessageRecovered struct { + MessageId [32]byte + Raw types.Log +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverWithAckMessageRecoveredIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.FilterLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckMessageRecoveredIterator{contract: _CCIPReceiverWithAck.contract, event: "MessageRecovered", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageRecovered, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.WatchLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverWithAckMessageRecovered) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageRecovered", 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 (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) ParseMessageRecovered(log types.Log) (*CCIPReceiverWithAckMessageRecovered, error) { + event := new(CCIPReceiverWithAckMessageRecovered) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageRecovered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverWithAckMessageSentIterator struct { + Event *CCIPReceiverWithAckMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverWithAckMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverWithAckMessageSent) + 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(CCIPReceiverWithAckMessageSent) + 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 *CCIPReceiverWithAckMessageSentIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverWithAckMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverWithAckMessageSent struct { + IncomingMessageId [32]byte + ACKMessageId [32]byte + Raw types.Log +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*CCIPReceiverWithAckMessageSentIterator, error) { + + var incomingMessageIdRule []interface{} + for _, incomingMessageIdItem := range incomingMessageId { + incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) + } + var ACKMessageIdRule []interface{} + for _, ACKMessageIdItem := range ACKMessageId { + ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.FilterLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckMessageSentIterator{contract: _CCIPReceiverWithAck.contract, event: "MessageSent", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) { + + var incomingMessageIdRule []interface{} + for _, incomingMessageIdItem := range incomingMessageId { + incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) + } + var ACKMessageIdRule []interface{} + for _, ACKMessageIdItem := range ACKMessageId { + ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.WatchLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverWithAckMessageSent) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageSent", 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 (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) ParseMessageSent(log types.Log) (*CCIPReceiverWithAckMessageSent, error) { + event := new(CCIPReceiverWithAckMessageSent) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverWithAckMessageSucceededIterator struct { + Event *CCIPReceiverWithAckMessageSucceeded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverWithAckMessageSucceededIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverWithAckMessageSucceeded) + 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(CCIPReceiverWithAckMessageSucceeded) + 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 *CCIPReceiverWithAckMessageSucceededIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverWithAckMessageSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverWithAckMessageSucceeded struct { + MessageId [32]byte + Raw types.Log +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverWithAckMessageSucceededIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.FilterLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckMessageSucceededIterator{contract: _CCIPReceiverWithAck.contract, event: "MessageSucceeded", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageSucceeded, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.WatchLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverWithAckMessageSucceeded) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageSucceeded", 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 (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) ParseMessageSucceeded(log types.Log) (*CCIPReceiverWithAckMessageSucceeded, error) { + event := new(CCIPReceiverWithAckMessageSucceeded) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "MessageSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverWithAckOwnershipTransferRequestedIterator struct { + Event *CCIPReceiverWithAckOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverWithAckOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverWithAckOwnershipTransferRequested) + 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(CCIPReceiverWithAckOwnershipTransferRequested) + 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 *CCIPReceiverWithAckOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverWithAckOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverWithAckOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPReceiverWithAckOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckOwnershipTransferRequestedIterator{contract: _CCIPReceiverWithAck.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverWithAckOwnershipTransferRequested) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "OwnershipTransferRequested", 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 (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) ParseOwnershipTransferRequested(log types.Log) (*CCIPReceiverWithAckOwnershipTransferRequested, error) { + event := new(CCIPReceiverWithAckOwnershipTransferRequested) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReceiverWithAckOwnershipTransferredIterator struct { + Event *CCIPReceiverWithAckOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReceiverWithAckOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReceiverWithAckOwnershipTransferred) + 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(CCIPReceiverWithAckOwnershipTransferred) + 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 *CCIPReceiverWithAckOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *CCIPReceiverWithAckOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReceiverWithAckOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPReceiverWithAckOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPReceiverWithAckOwnershipTransferredIterator{contract: _CCIPReceiverWithAck.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPReceiverWithAck.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReceiverWithAckOwnershipTransferred) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "OwnershipTransferred", 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 (_CCIPReceiverWithAck *CCIPReceiverWithAckFilterer) ParseOwnershipTransferred(log types.Log) (*CCIPReceiverWithAckOwnershipTransferred, error) { + event := new(CCIPReceiverWithAckOwnershipTransferred) + if err := _CCIPReceiverWithAck.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SChains struct { + Recipient []byte + ExtraArgsBytes []byte +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAck) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _CCIPReceiverWithAck.abi.Events["FeeTokenModified"].ID: + return _CCIPReceiverWithAck.ParseFeeTokenModified(log) + case _CCIPReceiverWithAck.abi.Events["MessageAckReceived"].ID: + return _CCIPReceiverWithAck.ParseMessageAckReceived(log) + case _CCIPReceiverWithAck.abi.Events["MessageAckSent"].ID: + return _CCIPReceiverWithAck.ParseMessageAckSent(log) + case _CCIPReceiverWithAck.abi.Events["MessageFailed"].ID: + return _CCIPReceiverWithAck.ParseMessageFailed(log) + case _CCIPReceiverWithAck.abi.Events["MessageRecovered"].ID: + return _CCIPReceiverWithAck.ParseMessageRecovered(log) + case _CCIPReceiverWithAck.abi.Events["MessageSent"].ID: + return _CCIPReceiverWithAck.ParseMessageSent(log) + case _CCIPReceiverWithAck.abi.Events["MessageSucceeded"].ID: + return _CCIPReceiverWithAck.ParseMessageSucceeded(log) + case _CCIPReceiverWithAck.abi.Events["OwnershipTransferRequested"].ID: + return _CCIPReceiverWithAck.ParseOwnershipTransferRequested(log) + case _CCIPReceiverWithAck.abi.Events["OwnershipTransferred"].ID: + return _CCIPReceiverWithAck.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (CCIPReceiverWithAckFeeTokenModified) Topic() common.Hash { + return common.HexToHash("0x4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e") +} + +func (CCIPReceiverWithAckMessageAckReceived) Topic() common.Hash { + return common.HexToHash("0xef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79") +} + +func (CCIPReceiverWithAckMessageAckSent) Topic() common.Hash { + return common.HexToHash("0x75944f95ba0be568cb30faeb0ef135cb73d07006939da29722d670a97f5c5b26") +} + +func (CCIPReceiverWithAckMessageFailed) Topic() common.Hash { + return common.HexToHash("0x55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f") +} + +func (CCIPReceiverWithAckMessageRecovered) Topic() common.Hash { + return common.HexToHash("0xef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad") +} + +func (CCIPReceiverWithAckMessageSent) Topic() common.Hash { + return common.HexToHash("0x9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372") +} + +func (CCIPReceiverWithAckMessageSucceeded) Topic() common.Hash { + return common.HexToHash("0xdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f") +} + +func (CCIPReceiverWithAckOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (CCIPReceiverWithAckOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_CCIPReceiverWithAck *CCIPReceiverWithAck) Address() common.Address { + return _CCIPReceiverWithAck.address +} + +type CCIPReceiverWithAckInterface interface { + ACKMESSAGEMAGICBYTES(opts *bind.CallOpts) ([]byte, error) + + GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) + + GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) + + SFeeToken(opts *bind.CallOpts) (common.Address, error) + + SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) + + EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) + + ModifyFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) + + ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) + + SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) + + WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) + + WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + + Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterFeeTokenModified(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*CCIPReceiverWithAckFeeTokenModifiedIterator, error) + + WatchFeeTokenModified(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckFeeTokenModified, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) + + ParseFeeTokenModified(log types.Log) (*CCIPReceiverWithAckFeeTokenModified, error) + + FilterMessageAckReceived(opts *bind.FilterOpts) (*CCIPReceiverWithAckMessageAckReceivedIterator, error) + + WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageAckReceived) (event.Subscription, error) + + ParseMessageAckReceived(log types.Log) (*CCIPReceiverWithAckMessageAckReceived, error) + + FilterMessageAckSent(opts *bind.FilterOpts) (*CCIPReceiverWithAckMessageAckSentIterator, error) + + WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageAckSent) (event.Subscription, error) + + ParseMessageAckSent(log types.Log) (*CCIPReceiverWithAckMessageAckSent, error) + + FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverWithAckMessageFailedIterator, error) + + WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageFailed, messageId [][32]byte) (event.Subscription, error) + + ParseMessageFailed(log types.Log) (*CCIPReceiverWithAckMessageFailed, error) + + FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverWithAckMessageRecoveredIterator, error) + + WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageRecovered, messageId [][32]byte) (event.Subscription, error) + + ParseMessageRecovered(log types.Log) (*CCIPReceiverWithAckMessageRecovered, error) + + FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*CCIPReceiverWithAckMessageSentIterator, error) + + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) + + ParseMessageSent(log types.Log) (*CCIPReceiverWithAckMessageSent, error) + + FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*CCIPReceiverWithAckMessageSucceededIterator, error) + + WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckMessageSucceeded, messageId [][32]byte) (event.Subscription, error) + + ParseMessageSucceeded(log types.Log) (*CCIPReceiverWithAckMessageSucceeded, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPReceiverWithAckOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*CCIPReceiverWithAckOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPReceiverWithAckOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPReceiverWithAckOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*CCIPReceiverWithAckOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} diff --git a/core/gethwrappers/ccip/generated/ccipSender/ccipSender.go b/core/gethwrappers/ccip/generated/ccipSender/ccipSender.go new file mode 100644 index 0000000000..8a680436d9 --- /dev/null +++ b/core/gethwrappers/ccip/generated/ccipSender/ccipSender.go @@ -0,0 +1,1029 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ccipSender + +import ( + "errors" + "fmt" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "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 ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type ICCIPClientBaseapprovedSenderUpdate struct { + DestChainSelector uint64 + Sender []byte +} + +var CCIPSenderMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InsufficientFeeTokenAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientNativeFeeTokenAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"disableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"enableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"s_chains\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162002467380380620024678339810160408190526200003491620001a8565b8033806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620000fd565b5050506001600160a01b038116620000ea576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b031660805250620001da565b336001600160a01b03821603620001575760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bb57600080fd5b81516001600160a01b0381168114620001d357600080fd5b9392505050565b608051612247620002206000396000818161027201528181610ab901528181610c2601528181610d4401528181610e0801528181610ec00152610f5b01526122476000f3fe6080604052600436106100ca5760003560e01c806379ba509711610079578063b0f479a111610056578063b0f479a114610263578063d8469e4014610296578063effde240146102b6578063f2fde38b146102d757005b806379ba5097146101e25780638462a2b9146101f75780638da5cb5b1461021757005b8063536c6bfa116100a7578063536c6bfa146101745780635dc5ebdb146101945780635e35359e146101c257005b80630e958d6b146100d3578063181f5a771461010857806341eade461461015457005b366100d157005b005b3480156100df57600080fd5b506100f36100ee3660046119ac565b6102f7565b60405190151581526020015b60405180910390f35b34801561011457600080fd5b50604080518082018252601481527f4343495053656e64657220312e302e302d646576000000000000000000000000602082015290516100ff9190611a6d565b34801561016057600080fd5b506100d161016f366004611a87565b610341565b34801561018057600080fd5b506100d161018f366004611ac4565b610380565b3480156101a057600080fd5b506101b46101af366004611a87565b610396565b6040516100ff929190611af0565b3480156101ce57600080fd5b506100d16101dd366004611b29565b6104c2565b3480156101ee57600080fd5b506100d16104eb565b34801561020357600080fd5b506100d1610212366004611baf565b6105ed565b34801561022357600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ff565b34801561026f57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061023e565b3480156102a257600080fd5b506100d16102b1366004611c1b565b6107ce565b6102c96102c4366004611c9c565b610830565b6040519081526020016100ff565b3480156102e357600080fd5b506100d16102f2366004611d5d565b61103d565b67ffffffffffffffff8316600090815260026020819052604080832090519101906103259085908590611d7a565b9081526040519081900360200190205460ff1690509392505050565b610349611051565b67ffffffffffffffff811660009081526002602052604081209061036d82826118f8565b61037b6001830160006118f8565b505050565b610388611051565b61039282826110d4565b5050565b6002602052600090815260409020805481906103b190611d8a565b80601f01602080910402602001604051908101604052809291908181526020018280546103dd90611d8a565b801561042a5780601f106103ff5761010080835404028352916020019161042a565b820191906000526020600020905b81548152906001019060200180831161040d57829003601f168201915b50505050509080600101805461043f90611d8a565b80601f016020809104026020016040519081016040528092919081815260200182805461046b90611d8a565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905082565b6104ca611051565b61037b73ffffffffffffffffffffffffffffffffffffffff8416838361122e565b60015473ffffffffffffffffffffffffffffffffffffffff163314610571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6105f5611051565b60005b818110156106d8576002600084848481811061061657610616611ddd565b90506020028101906106289190611e0c565b610636906020810190611a87565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061066d5761066d611ddd565b905060200281019061067f9190611e0c565b61068d906020810190611e4a565b60405161069b929190611d7a565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556001016105f8565b5060005b838110156107c7576001600260008787858181106106fc576106fc611ddd565b905060200281019061070e9190611e0c565b61071c906020810190611a87565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061075357610753611ddd565b90506020028101906107659190611e0c565b610773906020810190611e4a565b604051610781929190611d7a565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790556001016106dc565b5050505050565b6107d6611051565b67ffffffffffffffff851660009081526002602052604090206107fa848683611f26565b5080156107c75767ffffffffffffffff85166000908152600260205260409020600101610828828483611f26565b505050505050565b67ffffffffffffffff86166000908152600260205260408120805488919061085790611d8a565b905060000361089e576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610568565b6040805160a08101825267ffffffffffffffff8a166000908152600260205291822080548291906108ce90611d8a565b80601f01602080910402602001604051908101604052809291908181526020018280546108fa90611d8a565b80156109475780601f1061091c57610100808354040283529160200191610947565b820191906000526020600020905b81548152906001019060200180831161092a57829003601f168201915b5050505050815260200187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250506040805160208d8102820181019092528c815293810193928d92508c9182919085015b828210156109d7576109c860408302860136819003810190612040565b815260200190600101906109ab565b505050505081526020018573ffffffffffffffffffffffffffffffffffffffff168152602001600260008c67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206001018054610a3290611d8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e90611d8a565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050815250905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166320487ded8b846040518363ffffffff1660e01b8152600401610b12929190612098565b602060405180830381865afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5391906121ad565b905060005b88811015610da457610bc733308c8c85818110610b7757610b77611ddd565b905060400201602001358d8d86818110610b9357610b93611ddd565b610ba99260206040909202019081019150611d5d565b73ffffffffffffffffffffffffffffffffffffffff16929190611302565b8573ffffffffffffffffffffffffffffffffffffffff168a8a83818110610bf057610bf0611ddd565b610c069260206040909202019081019150611d5d565b73ffffffffffffffffffffffffffffffffffffffff1614610cab57610ca67f00000000000000000000000000000000000000000000000000000000000000008b8b84818110610c5757610c57611ddd565b905060400201602001358c8c85818110610c7357610c73611ddd565b610c899260206040909202019081019150611d5d565b73ffffffffffffffffffffffffffffffffffffffff169190611366565b610d9c565b8573ffffffffffffffffffffffffffffffffffffffff168a8a83818110610cd457610cd4611ddd565b610cea9260206040909202019081019150611d5d565b73ffffffffffffffffffffffffffffffffffffffff16148015610d22575073ffffffffffffffffffffffffffffffffffffffff861615155b15610d9c57610d3f3330848d8d86818110610b9357610b93611ddd565b610d9c7f0000000000000000000000000000000000000000000000000000000000000000838c8c85818110610d7657610d76611ddd565b90506040020160200135610d8a91906121c6565b8c8c85818110610c7357610c73611ddd565b600101610b58565b5073ffffffffffffffffffffffffffffffffffffffff851615801590610e7d57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015286169063dd62ed3e90604401602060405180830381865afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b91906121ad565b155b15610eea57610ea473ffffffffffffffffffffffffffffffffffffffff8616333084611302565b610ee573ffffffffffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000083611366565b610f44565b73ffffffffffffffffffffffffffffffffffffffff8516158015610f0d57508034105b15610f44576040517f07da6ee600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116906396f4e9f990871615610f91576000610f93565b825b8c856040518463ffffffff1660e01b8152600401610fb2929190612098565b60206040518083038185885af1158015610fd0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ff591906121ad565b93507f54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a8460405161102891815260200190565b60405180910390a15050509695505050505050565b611045611051565b61104e816114e8565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610568565b565b8047101561113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610568565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611198576040519150601f19603f3d011682016040523d82523d6000602084013e61119d565b606091505b505090508061037b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610568565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261037b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526115dd565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526113609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611280565b50505050565b80158061140657506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140491906121ad565b155b611492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610568565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261037b9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611280565b3373ffffffffffffffffffffffffffffffffffffffff821603611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610568565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061163f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116e99092919063ffffffff16565b80519091501561037b578080602001905181019061165d9190612206565b61037b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610568565b60606116f88484600085611700565b949350505050565b606082471015611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610568565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516117bb9190612228565b60006040518083038185875af1925050503d80600081146117f8576040519150601f19603f3d011682016040523d82523d6000602084013e6117fd565b606091505b509150915061180e87838387611819565b979650505050505050565b606083156118af5782516000036118a85773ffffffffffffffffffffffffffffffffffffffff85163b6118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610568565b50816116f8565b6116f883838151156118c45781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105689190611a6d565b50805461190490611d8a565b6000825580601f10611914575050565b601f01602090049060005260206000209081019061104e91905b80821115611942576000815560010161192e565b5090565b803567ffffffffffffffff8116811461195e57600080fd5b919050565b60008083601f84011261197557600080fd5b50813567ffffffffffffffff81111561198d57600080fd5b6020830191508360208285010111156119a557600080fd5b9250929050565b6000806000604084860312156119c157600080fd5b6119ca84611946565b9250602084013567ffffffffffffffff8111156119e657600080fd5b6119f286828701611963565b9497909650939450505050565b60005b83811015611a1a578181015183820152602001611a02565b50506000910152565b60008151808452611a3b8160208601602086016119ff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a806020830184611a23565b9392505050565b600060208284031215611a9957600080fd5b611a8082611946565b73ffffffffffffffffffffffffffffffffffffffff8116811461104e57600080fd5b60008060408385031215611ad757600080fd5b8235611ae281611aa2565b946020939093013593505050565b604081526000611b036040830185611a23565b8281036020840152611b158185611a23565b95945050505050565b803561195e81611aa2565b600080600060608486031215611b3e57600080fd5b8335611b4981611aa2565b92506020840135611b5981611aa2565b929592945050506040919091013590565b60008083601f840112611b7c57600080fd5b50813567ffffffffffffffff811115611b9457600080fd5b6020830191508360208260051b85010111156119a557600080fd5b60008060008060408587031215611bc557600080fd5b843567ffffffffffffffff80821115611bdd57600080fd5b611be988838901611b6a565b90965094506020870135915080821115611c0257600080fd5b50611c0f87828801611b6a565b95989497509550505050565b600080600080600060608688031215611c3357600080fd5b611c3c86611946565b9450602086013567ffffffffffffffff80821115611c5957600080fd5b611c6589838a01611963565b90965094506040880135915080821115611c7e57600080fd5b50611c8b88828901611963565b969995985093965092949392505050565b60008060008060008060808789031215611cb557600080fd5b611cbe87611946565b9550602087013567ffffffffffffffff80821115611cdb57600080fd5b818901915089601f830112611cef57600080fd5b813581811115611cfe57600080fd5b8a60208260061b8501011115611d1357600080fd5b602083019750809650506040890135915080821115611d3157600080fd5b50611d3e89828a01611963565b9094509250611d51905060608801611b1e565b90509295509295509295565b600060208284031215611d6f57600080fd5b8135611a8081611aa2565b8183823760009101908152919050565b600181811c90821680611d9e57607f821691505b602082108103611dd7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112611e4057600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611e7f57600080fd5b83018035915067ffffffffffffffff821115611e9a57600080fd5b6020019150368190038213156119a557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561037b576000816000526020600020601f850160051c81016020861015611f075750805b601f850160051c820191505b8181101561082857828155600101611f13565b67ffffffffffffffff831115611f3e57611f3e611eaf565b611f5283611f4c8354611d8a565b83611ede565b6000601f841160018114611fa45760008515611f6e5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556107c7565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015611ff35786850135825560209485019460019092019101611fd3565b508682101561202e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60006040828403121561205257600080fd5b6040516040810181811067ffffffffffffffff8211171561207557612075611eaf565b604052823561208381611aa2565b81526020928301359281019290925250919050565b6000604067ffffffffffffffff851683526020604081850152845160a060408601526120c760e0860182611a23565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808784030160608801526121028383611a23565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015612163578451805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152938501936001939093019290860190612124565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a0152955061219f8187611a23565b9a9950505050505050505050565b6000602082840312156121bf57600080fd5b5051919050565b80820180821115612200577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561221857600080fd5b81518015158114611a8057600080fd5b60008251611e408184602087016119ff56fea164736f6c6343000818000a", +} + +var CCIPSenderABI = CCIPSenderMetaData.ABI + +var CCIPSenderBin = CCIPSenderMetaData.Bin + +func DeployCCIPSender(auth *bind.TransactOpts, backend bind.ContractBackend, router common.Address) (common.Address, *types.Transaction, *CCIPSender, error) { + parsed, err := CCIPSenderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CCIPSenderBin), backend, router) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &CCIPSender{address: address, abi: *parsed, CCIPSenderCaller: CCIPSenderCaller{contract: contract}, CCIPSenderTransactor: CCIPSenderTransactor{contract: contract}, CCIPSenderFilterer: CCIPSenderFilterer{contract: contract}}, nil +} + +type CCIPSender struct { + address common.Address + abi abi.ABI + CCIPSenderCaller + CCIPSenderTransactor + CCIPSenderFilterer +} + +type CCIPSenderCaller struct { + contract *bind.BoundContract +} + +type CCIPSenderTransactor struct { + contract *bind.BoundContract +} + +type CCIPSenderFilterer struct { + contract *bind.BoundContract +} + +type CCIPSenderSession struct { + Contract *CCIPSender + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type CCIPSenderCallerSession struct { + Contract *CCIPSenderCaller + CallOpts bind.CallOpts +} + +type CCIPSenderTransactorSession struct { + Contract *CCIPSenderTransactor + TransactOpts bind.TransactOpts +} + +type CCIPSenderRaw struct { + Contract *CCIPSender +} + +type CCIPSenderCallerRaw struct { + Contract *CCIPSenderCaller +} + +type CCIPSenderTransactorRaw struct { + Contract *CCIPSenderTransactor +} + +func NewCCIPSender(address common.Address, backend bind.ContractBackend) (*CCIPSender, error) { + abi, err := abi.JSON(strings.NewReader(CCIPSenderABI)) + if err != nil { + return nil, err + } + contract, err := bindCCIPSender(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CCIPSender{address: address, abi: abi, CCIPSenderCaller: CCIPSenderCaller{contract: contract}, CCIPSenderTransactor: CCIPSenderTransactor{contract: contract}, CCIPSenderFilterer: CCIPSenderFilterer{contract: contract}}, nil +} + +func NewCCIPSenderCaller(address common.Address, caller bind.ContractCaller) (*CCIPSenderCaller, error) { + contract, err := bindCCIPSender(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CCIPSenderCaller{contract: contract}, nil +} + +func NewCCIPSenderTransactor(address common.Address, transactor bind.ContractTransactor) (*CCIPSenderTransactor, error) { + contract, err := bindCCIPSender(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CCIPSenderTransactor{contract: contract}, nil +} + +func NewCCIPSenderFilterer(address common.Address, filterer bind.ContractFilterer) (*CCIPSenderFilterer, error) { + contract, err := bindCCIPSender(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CCIPSenderFilterer{contract: contract}, nil +} + +func bindCCIPSender(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CCIPSenderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_CCIPSender *CCIPSenderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPSender.Contract.CCIPSenderCaller.contract.Call(opts, result, method, params...) +} + +func (_CCIPSender *CCIPSenderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPSender.Contract.CCIPSenderTransactor.contract.Transfer(opts) +} + +func (_CCIPSender *CCIPSenderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPSender.Contract.CCIPSenderTransactor.contract.Transact(opts, method, params...) +} + +func (_CCIPSender *CCIPSenderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPSender.Contract.contract.Call(opts, result, method, params...) +} + +func (_CCIPSender *CCIPSenderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPSender.Contract.contract.Transfer(opts) +} + +func (_CCIPSender *CCIPSenderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPSender.Contract.contract.Transact(opts, method, params...) +} + +func (_CCIPSender *CCIPSenderCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPSender.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPSender *CCIPSenderSession) GetRouter() (common.Address, error) { + return _CCIPSender.Contract.GetRouter(&_CCIPSender.CallOpts) +} + +func (_CCIPSender *CCIPSenderCallerSession) GetRouter() (common.Address, error) { + return _CCIPSender.Contract.GetRouter(&_CCIPSender.CallOpts) +} + +func (_CCIPSender *CCIPSenderCaller) IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) { + var out []interface{} + err := _CCIPSender.contract.Call(opts, &out, "isApprovedSender", sourceChainSelector, senderAddr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_CCIPSender *CCIPSenderSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _CCIPSender.Contract.IsApprovedSender(&_CCIPSender.CallOpts, sourceChainSelector, senderAddr) +} + +func (_CCIPSender *CCIPSenderCallerSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _CCIPSender.Contract.IsApprovedSender(&_CCIPSender.CallOpts, sourceChainSelector, senderAddr) +} + +func (_CCIPSender *CCIPSenderCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPSender.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPSender *CCIPSenderSession) Owner() (common.Address, error) { + return _CCIPSender.Contract.Owner(&_CCIPSender.CallOpts) +} + +func (_CCIPSender *CCIPSenderCallerSession) Owner() (common.Address, error) { + return _CCIPSender.Contract.Owner(&_CCIPSender.CallOpts) +} + +func (_CCIPSender *CCIPSenderCaller) SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) { + var out []interface{} + err := _CCIPSender.contract.Call(opts, &out, "s_chains", arg0) + + outstruct := new(SChains) + if err != nil { + return *outstruct, err + } + + outstruct.Recipient = *abi.ConvertType(out[0], new([]byte)).(*[]byte) + outstruct.ExtraArgsBytes = *abi.ConvertType(out[1], new([]byte)).(*[]byte) + + return *outstruct, err + +} + +func (_CCIPSender *CCIPSenderSession) SChains(arg0 uint64) (SChains, + + error) { + return _CCIPSender.Contract.SChains(&_CCIPSender.CallOpts, arg0) +} + +func (_CCIPSender *CCIPSenderCallerSession) SChains(arg0 uint64) (SChains, + + error) { + return _CCIPSender.Contract.SChains(&_CCIPSender.CallOpts, arg0) +} + +func (_CCIPSender *CCIPSenderCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _CCIPSender.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_CCIPSender *CCIPSenderSession) TypeAndVersion() (string, error) { + return _CCIPSender.Contract.TypeAndVersion(&_CCIPSender.CallOpts) +} + +func (_CCIPSender *CCIPSenderCallerSession) TypeAndVersion() (string, error) { + return _CCIPSender.Contract.TypeAndVersion(&_CCIPSender.CallOpts) +} + +func (_CCIPSender *CCIPSenderTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPSender.contract.Transact(opts, "acceptOwnership") +} + +func (_CCIPSender *CCIPSenderSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPSender.Contract.AcceptOwnership(&_CCIPSender.TransactOpts) +} + +func (_CCIPSender *CCIPSenderTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPSender.Contract.AcceptOwnership(&_CCIPSender.TransactOpts) +} + +func (_CCIPSender *CCIPSenderTransactor) CcipSend(opts *bind.TransactOpts, destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _CCIPSender.contract.Transact(opts, "ccipSend", destChainSelector, tokenAmounts, data, feeToken) +} + +func (_CCIPSender *CCIPSenderSession) CcipSend(destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _CCIPSender.Contract.CcipSend(&_CCIPSender.TransactOpts, destChainSelector, tokenAmounts, data, feeToken) +} + +func (_CCIPSender *CCIPSenderTransactorSession) CcipSend(destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _CCIPSender.Contract.CcipSend(&_CCIPSender.TransactOpts, destChainSelector, tokenAmounts, data, feeToken) +} + +func (_CCIPSender *CCIPSenderTransactor) DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { + return _CCIPSender.contract.Transact(opts, "disableChain", chainSelector) +} + +func (_CCIPSender *CCIPSenderSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _CCIPSender.Contract.DisableChain(&_CCIPSender.TransactOpts, chainSelector) +} + +func (_CCIPSender *CCIPSenderTransactorSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _CCIPSender.Contract.DisableChain(&_CCIPSender.TransactOpts, chainSelector) +} + +func (_CCIPSender *CCIPSenderTransactor) EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPSender.contract.Transact(opts, "enableChain", chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPSender *CCIPSenderSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPSender.Contract.EnableChain(&_CCIPSender.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPSender *CCIPSenderTransactorSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _CCIPSender.Contract.EnableChain(&_CCIPSender.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_CCIPSender *CCIPSenderTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _CCIPSender.contract.Transact(opts, "transferOwnership", to) +} + +func (_CCIPSender *CCIPSenderSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPSender.Contract.TransferOwnership(&_CCIPSender.TransactOpts, to) +} + +func (_CCIPSender *CCIPSenderTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPSender.Contract.TransferOwnership(&_CCIPSender.TransactOpts, to) +} + +func (_CCIPSender *CCIPSenderTransactor) UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPSender.contract.Transact(opts, "updateApprovedSenders", adds, removes) +} + +func (_CCIPSender *CCIPSenderSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPSender.Contract.UpdateApprovedSenders(&_CCIPSender.TransactOpts, adds, removes) +} + +func (_CCIPSender *CCIPSenderTransactorSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _CCIPSender.Contract.UpdateApprovedSenders(&_CCIPSender.TransactOpts, adds, removes) +} + +func (_CCIPSender *CCIPSenderTransactor) WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPSender.contract.Transact(opts, "withdrawNativeToken", to, amount) +} + +func (_CCIPSender *CCIPSenderSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPSender.Contract.WithdrawNativeToken(&_CCIPSender.TransactOpts, to, amount) +} + +func (_CCIPSender *CCIPSenderTransactorSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPSender.Contract.WithdrawNativeToken(&_CCIPSender.TransactOpts, to, amount) +} + +func (_CCIPSender *CCIPSenderTransactor) WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPSender.contract.Transact(opts, "withdrawTokens", token, to, amount) +} + +func (_CCIPSender *CCIPSenderSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPSender.Contract.WithdrawTokens(&_CCIPSender.TransactOpts, token, to, amount) +} + +func (_CCIPSender *CCIPSenderTransactorSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _CCIPSender.Contract.WithdrawTokens(&_CCIPSender.TransactOpts, token, to, amount) +} + +func (_CCIPSender *CCIPSenderTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _CCIPSender.contract.RawTransact(opts, calldata) +} + +func (_CCIPSender *CCIPSenderSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _CCIPSender.Contract.Fallback(&_CCIPSender.TransactOpts, calldata) +} + +func (_CCIPSender *CCIPSenderTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _CCIPSender.Contract.Fallback(&_CCIPSender.TransactOpts, calldata) +} + +func (_CCIPSender *CCIPSenderTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPSender.contract.RawTransact(opts, nil) +} + +func (_CCIPSender *CCIPSenderSession) Receive() (*types.Transaction, error) { + return _CCIPSender.Contract.Receive(&_CCIPSender.TransactOpts) +} + +func (_CCIPSender *CCIPSenderTransactorSession) Receive() (*types.Transaction, error) { + return _CCIPSender.Contract.Receive(&_CCIPSender.TransactOpts) +} + +type CCIPSenderMessageReceivedIterator struct { + Event *CCIPSenderMessageReceived + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPSenderMessageReceivedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPSenderMessageReceived) + 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(CCIPSenderMessageReceived) + 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 *CCIPSenderMessageReceivedIterator) Error() error { + return it.fail +} + +func (it *CCIPSenderMessageReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPSenderMessageReceived struct { + MessageId [32]byte + Raw types.Log +} + +func (_CCIPSender *CCIPSenderFilterer) FilterMessageReceived(opts *bind.FilterOpts) (*CCIPSenderMessageReceivedIterator, error) { + + logs, sub, err := _CCIPSender.contract.FilterLogs(opts, "MessageReceived") + if err != nil { + return nil, err + } + return &CCIPSenderMessageReceivedIterator{contract: _CCIPSender.contract, event: "MessageReceived", logs: logs, sub: sub}, nil +} + +func (_CCIPSender *CCIPSenderFilterer) WatchMessageReceived(opts *bind.WatchOpts, sink chan<- *CCIPSenderMessageReceived) (event.Subscription, error) { + + logs, sub, err := _CCIPSender.contract.WatchLogs(opts, "MessageReceived") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPSenderMessageReceived) + if err := _CCIPSender.contract.UnpackLog(event, "MessageReceived", 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 (_CCIPSender *CCIPSenderFilterer) ParseMessageReceived(log types.Log) (*CCIPSenderMessageReceived, error) { + event := new(CCIPSenderMessageReceived) + if err := _CCIPSender.contract.UnpackLog(event, "MessageReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPSenderMessageSentIterator struct { + Event *CCIPSenderMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPSenderMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPSenderMessageSent) + 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(CCIPSenderMessageSent) + 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 *CCIPSenderMessageSentIterator) Error() error { + return it.fail +} + +func (it *CCIPSenderMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPSenderMessageSent struct { + MessageId [32]byte + Raw types.Log +} + +func (_CCIPSender *CCIPSenderFilterer) FilterMessageSent(opts *bind.FilterOpts) (*CCIPSenderMessageSentIterator, error) { + + logs, sub, err := _CCIPSender.contract.FilterLogs(opts, "MessageSent") + if err != nil { + return nil, err + } + return &CCIPSenderMessageSentIterator{contract: _CCIPSender.contract, event: "MessageSent", logs: logs, sub: sub}, nil +} + +func (_CCIPSender *CCIPSenderFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *CCIPSenderMessageSent) (event.Subscription, error) { + + logs, sub, err := _CCIPSender.contract.WatchLogs(opts, "MessageSent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPSenderMessageSent) + if err := _CCIPSender.contract.UnpackLog(event, "MessageSent", 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 (_CCIPSender *CCIPSenderFilterer) ParseMessageSent(log types.Log) (*CCIPSenderMessageSent, error) { + event := new(CCIPSenderMessageSent) + if err := _CCIPSender.contract.UnpackLog(event, "MessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPSenderOwnershipTransferRequestedIterator struct { + Event *CCIPSenderOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPSenderOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPSenderOwnershipTransferRequested) + 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(CCIPSenderOwnershipTransferRequested) + 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 *CCIPSenderOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *CCIPSenderOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPSenderOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPSender *CCIPSenderFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPSenderOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPSender.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPSenderOwnershipTransferRequestedIterator{contract: _CCIPSender.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_CCIPSender *CCIPSenderFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPSenderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPSender.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPSenderOwnershipTransferRequested) + if err := _CCIPSender.contract.UnpackLog(event, "OwnershipTransferRequested", 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 (_CCIPSender *CCIPSenderFilterer) ParseOwnershipTransferRequested(log types.Log) (*CCIPSenderOwnershipTransferRequested, error) { + event := new(CCIPSenderOwnershipTransferRequested) + if err := _CCIPSender.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPSenderOwnershipTransferredIterator struct { + Event *CCIPSenderOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPSenderOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPSenderOwnershipTransferred) + 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(CCIPSenderOwnershipTransferred) + 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 *CCIPSenderOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *CCIPSenderOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPSenderOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPSender *CCIPSenderFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPSenderOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPSender.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPSenderOwnershipTransferredIterator{contract: _CCIPSender.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_CCIPSender *CCIPSenderFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPSenderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPSender.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPSenderOwnershipTransferred) + if err := _CCIPSender.contract.UnpackLog(event, "OwnershipTransferred", 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 (_CCIPSender *CCIPSenderFilterer) ParseOwnershipTransferred(log types.Log) (*CCIPSenderOwnershipTransferred, error) { + event := new(CCIPSenderOwnershipTransferred) + if err := _CCIPSender.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SChains struct { + Recipient []byte + ExtraArgsBytes []byte +} + +func (_CCIPSender *CCIPSender) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _CCIPSender.abi.Events["MessageReceived"].ID: + return _CCIPSender.ParseMessageReceived(log) + case _CCIPSender.abi.Events["MessageSent"].ID: + return _CCIPSender.ParseMessageSent(log) + case _CCIPSender.abi.Events["OwnershipTransferRequested"].ID: + return _CCIPSender.ParseOwnershipTransferRequested(log) + case _CCIPSender.abi.Events["OwnershipTransferred"].ID: + return _CCIPSender.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (CCIPSenderMessageReceived) Topic() common.Hash { + return common.HexToHash("0xe29dc34207c78fc0f6048a32f159139c33339c6d6df8b07dcd33f6d699ff2327") +} + +func (CCIPSenderMessageSent) Topic() common.Hash { + return common.HexToHash("0x54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a") +} + +func (CCIPSenderOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (CCIPSenderOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_CCIPSender *CCIPSender) Address() common.Address { + return _CCIPSender.address +} + +type CCIPSenderInterface interface { + GetRouter(opts *bind.CallOpts) (common.Address, error) + + IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + CcipSend(opts *bind.TransactOpts, destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) + + DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) + + EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) + + WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) + + WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + + Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterMessageReceived(opts *bind.FilterOpts) (*CCIPSenderMessageReceivedIterator, error) + + WatchMessageReceived(opts *bind.WatchOpts, sink chan<- *CCIPSenderMessageReceived) (event.Subscription, error) + + ParseMessageReceived(log types.Log) (*CCIPSenderMessageReceived, error) + + FilterMessageSent(opts *bind.FilterOpts) (*CCIPSenderMessageSentIterator, error) + + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *CCIPSenderMessageSent) (event.Subscription, error) + + ParseMessageSent(log types.Log) (*CCIPSenderMessageSent, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPSenderOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPSenderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*CCIPSenderOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPSenderOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPSenderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*CCIPSenderOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} diff --git a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go index 4387dd3080..f12b84a906 100644 --- a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go +++ b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go @@ -43,9 +43,14 @@ type ClientEVMTokenAmount struct { Amount *big.Int } +type ICCIPClientBaseapprovedSenderUpdate struct { + DestChainSelector uint64 + Sender []byte +} + var PingPongDemoMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620013d8380380620013d8833981016040819052620000349162000263565b33806000846001600160a01b03811662000069576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b6001600160a01b039081166080528216620000c75760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000604482015260640162000060565b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000fa57620000fa816200019f565b50506002805460ff60a01b1916905550600380546001600160a01b0319166001600160a01b0383811691821790925560405163095ea7b360e01b8152918416600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001969190620002a2565b505050620002cd565b336001600160a01b03821603620001f95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000060565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200026057600080fd5b50565b600080604083850312156200027757600080fd5b825162000284816200024a565b602084015190925062000297816200024a565b809150509250929050565b600060208284031215620002b557600080fd5b81518015158114620002c657600080fd5b9392505050565b6080516110e1620002f7600039600081816102290152818161058e01526108f201526110e16000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063b5a1101111610066578063b5a1101114610270578063bee518a414610283578063ca709a25146102c1578063f2fde38b146102df57600080fd5b80638da5cb5b146101f65780639d2aede514610214578063b0f479a114610227578063b187bd261461024d57600080fd5b80632874d8bf116100d35780632874d8bf146101945780632b6e5d631461019c57806379ba5097146101db57806385572ffb146101e357600080fd5b806301ffc9a71461010557806316c38b3c1461012d578063181f5a77146101425780631892b90614610181575b600080fd5b610118610113366004610af5565b6102f2565b60405190151581526020015b60405180910390f35b61014061013b366004610b3e565b61038b565b005b604080518082018252601281527f50696e67506f6e6744656d6f20312e322e300000000000000000000000000000602082015290516101249190610bc4565b61014061018f366004610bf4565b6103dd565b610140610438565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b610140610474565b6101406101f1366004610c0f565b610576565b60005473ffffffffffffffffffffffffffffffffffffffff166101b6565b610140610222366004610c6e565b6105fb565b7f00000000000000000000000000000000000000000000000000000000000000006101b6565b60025474010000000000000000000000000000000000000000900460ff16610118565b61014061027e366004610c89565b61064a565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff9091168152602001610124565b60035473ffffffffffffffffffffffffffffffffffffffff166101b6565b6101406102ed366004610c6e565b6106ec565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061038557507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6103936106fd565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6103e56106fd565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104406106fd565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055610472600161077e565b565b60015473ffffffffffffffffffffffffffffffffffffffff1633146104fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105e7576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024016104f1565b6105f86105f382610ebf565b6109aa565b50565b6106036106fd565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6106526106fd565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b6106f46106fd565b6105f881610a00565b60005473ffffffffffffffffffffffffffffffffffffffff163314610472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016104f1565b806001166001036107c1576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a16107f5565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b60008160405160200161080a91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815260a08301825260025473ffffffffffffffffffffffffffffffffffffffff1660c0808501919091528251808503909101815260e084018352835260208084018290528251600080825291810184529194509291820190836108b8565b60408051808201909152600080825260208201528152602001906001900390816108915790505b50815260035473ffffffffffffffffffffffffffffffffffffffff16602080830191909152604080519182018152600082529091015290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166396f4e9f9600160149054906101000a900467ffffffffffffffff16836040518363ffffffff1660e01b8152600401610961929190610f6c565b6020604051808303816000875af1158015610980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a49190611081565b50505050565b600081606001518060200190518101906109c49190611081565b60025490915074010000000000000000000000000000000000000000900460ff166109fc576109fc6109f782600161109a565b61077e565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016104f1565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610b0757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610b3757600080fd5b9392505050565b600060208284031215610b5057600080fd5b81358015158114610b3757600080fd5b6000815180845260005b81811015610b8657602081850181015186830182015201610b6a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610b376020830184610b60565b803567ffffffffffffffff81168114610bef57600080fd5b919050565b600060208284031215610c0657600080fd5b610b3782610bd7565b600060208284031215610c2157600080fd5b813567ffffffffffffffff811115610c3857600080fd5b820160a08185031215610b3757600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610bef57600080fd5b600060208284031215610c8057600080fd5b610b3782610c4a565b60008060408385031215610c9c57600080fd5b610ca583610bd7565b9150610cb360208401610c4a565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610d0e57610d0e610cbc565b60405290565b60405160a0810167ffffffffffffffff81118282101715610d0e57610d0e610cbc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610d7e57610d7e610cbc565b604052919050565b600082601f830112610d9757600080fd5b813567ffffffffffffffff811115610db157610db1610cbc565b610de260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610d37565b818152846020838601011115610df757600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610e2557600080fd5b8135602067ffffffffffffffff821115610e4157610e41610cbc565b610e4f818360051b01610d37565b82815260069290921b84018101918181019086841115610e6e57600080fd5b8286015b84811015610eb45760408189031215610e8b5760008081fd5b610e93610ceb565b610e9c82610c4a565b81528185013585820152835291830191604001610e72565b509695505050505050565b600060a08236031215610ed157600080fd5b610ed9610d14565b82358152610ee960208401610bd7565b6020820152604083013567ffffffffffffffff80821115610f0957600080fd5b610f1536838701610d86565b60408401526060850135915080821115610f2e57600080fd5b610f3a36838701610d86565b60608401526080850135915080821115610f5357600080fd5b50610f6036828601610e14565b60808301525092915050565b6000604067ffffffffffffffff851683526020604081850152845160a06040860152610f9b60e0860182610b60565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878403016060880152610fd68383610b60565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015611037578451805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152938501936001939093019290860190610ff8565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a015295506110738187610b60565b9a9950505050505050505050565b60006020828403121561109357600080fd5b5051919050565b80820180821115610385577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CannotAcknowledgeUnsentMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorCase\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFeeTokenAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMagicBytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ACKMESSAGEMAGICBYTES\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"disableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"enableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"s_chains\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"simRevert\",\"type\":\"bool\"}],\"name\":\"setSimRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b50604051620046b6380380620046b68339810160408190526200003491620005cc565b8181818181803380600081620000915760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c457620000c48162000144565b5050506001600160a01b038116620000ef576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0390811660805260078054610100600160a81b0319166101009285169283021790551590506200013857620001386001600160a01b03821683600019620001ef565b505050505050620006c9565b336001600160a01b038216036200019e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000088565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8015806200026d5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026b91906200060b565b155b620002e15760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000088565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003399185916200033e16565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200038d906001600160a01b0385169084906200040f565b805190915015620003395780806020019051810190620003ae919062000625565b620003395760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000088565b606062000420848460008562000428565b949350505050565b6060824710156200048b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000088565b600080866001600160a01b03168587604051620004a9919062000676565b60006040518083038185875af1925050503d8060008114620004e8576040519150601f19603f3d011682016040523d82523d6000602084013e620004ed565b606091505b50909250905062000501878383876200050c565b979650505050505050565b606083156200058057825160000362000578576001600160a01b0385163b620005785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000088565b508162000420565b620004208383815115620005975781518083602001fd5b8060405162461bcd60e51b815260040162000088919062000694565b6001600160a01b0381168114620005c957600080fd5b50565b60008060408385031215620005e057600080fd5b8251620005ed81620005b3565b60208401519092506200060081620005b3565b809150509250929050565b6000602082840312156200061e57600080fd5b5051919050565b6000602082840312156200063857600080fd5b815180151581146200064957600080fd5b9392505050565b60005b838110156200066d57818101518382015260200162000653565b50506000910152565b600082516200068a81846020870162000650565b9190910192915050565b6020815260008251806020840152620006b581604085016020870162000650565b601f01601f19169190910160400192915050565b608051613fa76200070f6000396000818161056001528181610744015281816107e20152818161107901528181611c3201528181611e05015261201b0152613fa76000f3fe6080604052600436106101c45760003560e01c80636939cd97116100f6578063b5a110111161008f578063e4ca875411610061578063e4ca875414610645578063effde24014610665578063f2fde38b14610678578063ff2deec31461069857005b8063b5a11011146105bc578063bee518a4146105dc578063cf6730f814610605578063d8469e401461062557005b80638da5cb5b116100c85780638da5cb5b146105065780639d2aede514610531578063b0f479a114610551578063b187bd261461058457005b80636939cd971461048457806379ba5097146104b15780638462a2b9146104c657806385572ffb146104e657005b80632b6e5d631161016857806352f813c31161013a57806352f813c3146103f6578063536c6bfa146104165780635dc5ebdb146104365780635e35359e1461046457005b80632b6e5d63146103075780633a51b79e1461035f57806341eade46146103a85780635075a9d4146103c857005b806316c38b3c116101a157806316c38b3c14610263578063181f5a77146102835780631892b906146102d25780632874d8bf146102f257005b806305bfe982146101cd5780630e958d6b1461021357806311e85dff1461024357005b366101cb57005b005b3480156101d957600080fd5b506101fd6101e8366004612e66565b60086020526000908152604090205460ff1681565b60405161020a9190612e7f565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004612f1f565b6106ca565b604051901515815260200161020a565b34801561024f57600080fd5b506101cb61025e366004612fa6565b610714565b34801561026f57600080fd5b506101cb61027e366004612fd1565b6108a4565b34801561028f57600080fd5b5060408051808201909152601281527f50696e67506f6e6744656d6f20312e332e30000000000000000000000000000060208201525b60405161020a919061305c565b3480156102de57600080fd5b506101cb6102ed36600461306f565b6108fe565b3480156102fe57600080fd5b506101cb610941565b34801561031357600080fd5b5060095468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161020a565b34801561036b57600080fd5b506102c56040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b3480156103b457600080fd5b506101cb6103c336600461306f565b61097d565b3480156103d457600080fd5b506103e86103e3366004612e66565b6109bc565b60405190815260200161020a565b34801561040257600080fd5b506101cb610411366004612fd1565b6109cf565b34801561042257600080fd5b506101cb61043136600461308c565b610a08565b34801561044257600080fd5b5061045661045136600461306f565b610a1e565b60405161020a9291906130b8565b34801561047057600080fd5b506101cb61047f3660046130e6565b610b4a565b34801561049057600080fd5b506104a461049f366004612e66565b610b73565b60405161020a9190613184565b3480156104bd57600080fd5b506101cb610d7e565b3480156104d257600080fd5b506101cb6104e136600461325d565b610e80565b3480156104f257600080fd5b506101cb6105013660046132c9565b611061565b34801561051257600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661033a565b34801561053d57600080fd5b506101cb61054c366004612fa6565b611351565b34801561055d57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061033a565b34801561059057600080fd5b506009547c0100000000000000000000000000000000000000000000000000000000900460ff16610233565b3480156105c857600080fd5b506101cb6105d7366004613304565b611408565b3480156105e857600080fd5b5060095460405167ffffffffffffffff909116815260200161020a565b34801561061157600080fd5b506101cb6106203660046132c9565b611578565b34801561063157600080fd5b506101cb61064036600461333d565b61174d565b34801561065157600080fd5b506101cb610660366004612e66565b6117af565b6103e86106733660046134f5565b611a2d565b34801561068457600080fd5b506101cb610693366004612fa6565b612125565b3480156106a457600080fd5b5060075461033a90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff8316600090815260026020819052604080832090519101906106f89085908590613613565b9081526040519081900360200190205460ff1690509392505050565b61071c612139565b600754610100900473ffffffffffffffffffffffffffffffffffffffff1615610789576107897f0000000000000000000000000000000000000000000000000000000000000000600754610100900473ffffffffffffffffffffffffffffffffffffffff169060006121ba565b6007805473ffffffffffffffffffffffffffffffffffffffff8381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945592909104169015610846576108467f0000000000000000000000000000000000000000000000000000000000000000600754610100900473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6121ba565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b6108ac612139565b600980549115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b610906612139565b600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b610949612139565b600980547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905561097b60016123ba565b565b610985612139565b67ffffffffffffffff81166000908152600260205260408120906109a98282612e18565b6109b7600183016000612e18565b505050565b60006109c96004836124e6565b92915050565b6109d7612139565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b610a10612139565b610a1a82826124f9565b5050565b600260205260009081526040902080548190610a3990613623565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6590613623565b8015610ab25780601f10610a8757610100808354040283529160200191610ab2565b820191906000526020600020905b815481529060010190602001808311610a9557829003601f168201915b505050505090806001018054610ac790613623565b80601f0160208091040260200160405190810160405280929190818152602001828054610af390613623565b8015610b405780601f10610b1557610100808354040283529160200191610b40565b820191906000526020600020905b815481529060010190602001808311610b2357829003601f168201915b5050505050905082565b610b52612139565b6109b773ffffffffffffffffffffffffffffffffffffffff84168383612653565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260038152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610be290613623565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0e90613623565b8015610c5b5780601f10610c3057610100808354040283529160200191610c5b565b820191906000526020600020905b815481529060010190602001808311610c3e57829003601f168201915b50505050508152602001600382018054610c7490613623565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca090613623565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610d705760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610d1b565b505050915250909392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e88612139565b60005b81811015610f6b5760026000848484818110610ea957610ea9613676565b9050602002810190610ebb91906136a5565b610ec990602081019061306f565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610f0057610f00613676565b9050602002810190610f1291906136a5565b610f209060208101906136e3565b604051610f2e929190613613565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600101610e8b565b5060005b8381101561105a57600160026000878785818110610f8f57610f8f613676565b9050602002810190610fa191906136a5565b610faf90602081019061306f565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610fe657610fe6613676565b9050602002810190610ff891906136a5565b6110069060208101906136e3565b604051611014929190613613565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055600101610f6f565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146110d2576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610dfb565b6110e2604082016020830161306f565b6110ef60408301836136e3565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff861681526002602081905260409182902091519101935061114c9250849150613748565b9081526040519081900360200190205460ff1661119757806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610dfb919061305c565b6111a7604084016020850161306f565b67ffffffffffffffff8116600090815260026020526040902080546111cb90613623565b9050600003611212576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610dfb565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f89061124e90879060040161385c565b600060405180830381600087803b15801561126857600080fd5b505af1925050508015611279575060015b61131e573d8080156112a7576040519150601f19603f3d011682016040523d82523d6000602084013e6112ac565b606091505b506112be853560015b600491906126a9565b508435600090815260036020526040902085906112db8282613c2e565b50506040518535907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f9061131090849061305c565b60405180910390a25061134b565b6040518435907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b50505050565b611359612139565b600980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560408051602081019290925201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815260095467ffffffffffffffff16600090815260026020522090610a1a9082613d28565b611410612139565b6009805467ffffffffffffffff84167fffffffff0000000000000000000000000000000000000000000000000000000090911681176801000000000000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179092556000908152600260208181526040928390208351918201949094526001939091019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526114cb91613748565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff84166000908152600260205220906109b79082613d28565b3330146115b1576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115c1604082016020830161306f565b6115ce60408301836136e3565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff861681526002602081905260409182902091519101935061162b9250849150613748565b9081526040519081900360200190205460ff1661167657806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610dfb919061305c565b611686604084016020850161306f565b67ffffffffffffffff8116600090815260026020526040902080546116aa90613623565b90506000036116f1576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610dfb565b600061170060608601866136e3565b81019061170d9190612e66565b6009549091507c0100000000000000000000000000000000000000000000000000000000900460ff1661105a5761105a611748826001613e42565b6123ba565b611755612139565b67ffffffffffffffff851660009081526002602052604090206117798486836139b2565b50801561105a5767ffffffffffffffff851660009081526002602052604090206001016117a78284836139b2565b505050505050565b6117b7612139565b60016117c46004836124e6565b146117fe576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610dfb565b6118098160006112b5565b506000818152600360209081526040808320815160a08101835281548152600182015467ffffffffffffffff1693810193909352600281018054919284019161185190613623565b80601f016020809104026020016040519081016040528092919081815260200182805461187d90613623565b80156118ca5780601f1061189f576101008083540402835291602001916118ca565b820191906000526020600020905b8154815290600101906020018083116118ad57829003601f168201915b505050505081526020016003820180546118e390613623565b80601f016020809104026020016040519081016040528092919081815260200182805461190f90613623565b801561195c5780601f106119315761010080835404028352916020019161195c565b820191906000526020600020905b81548152906001019060200180831161193f57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156119df5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff16825260019081015482840152908352909201910161198a565b505050508152505090506119f2816126be565b6119fd600483612764565b5060405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff841660009081526002602052604081208054869190611a5490613623565b9050600003611a9b576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610dfb565b6040805160a08101825267ffffffffffffffff8816600090815260026020529182208054829190611acb90613623565b80601f0160208091040260200160405190810160405280929190818152602001828054611af790613623565b8015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b505050505081526020018681526020018781526020018573ffffffffffffffffffffffffffffffffffffffff168152602001600260008a67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206001018054611bab90613623565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd790613623565b8015611c245780601f10611bf957610100808354040283529160200191611c24565b820191906000526020600020905b815481529060010190602001808311611c0757829003601f168201915b5050505050815250905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166320487ded89846040518363ffffffff1660e01b8152600401611c8b929190613e55565b602060405180830381865afa158015611ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccc9190613f22565b90506000805b8851811015611e8d57611d4233308b8481518110611cf257611cf2613676565b6020026020010151602001518c8581518110611d1057611d10613676565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612770909392919063ffffffff16565b8673ffffffffffffffffffffffffffffffffffffffff16898281518110611d6b57611d6b613676565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16148015611daf575073ffffffffffffffffffffffffffffffffffffffff871615155b8015611dda575060075473ffffffffffffffffffffffffffffffffffffffff88811661010090920416145b15611e005760019150611dfb3330858c8581518110611d1057611d10613676565b611e85565b611e857f00000000000000000000000000000000000000000000000000000000000000008a8381518110611e3657611e36613676565b6020026020010151602001518b8481518110611e5457611e54613676565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166121ba9092919063ffffffff16565b600101611cd2565b5080158015611ebb575060075473ffffffffffffffffffffffffffffffffffffffff87811661010090920416145b8015611edc575073ffffffffffffffffffffffffffffffffffffffff861615155b15611faa576040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829073ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa158015611f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f719190613f22565b108015611f7e5750333014155b15611fa557611fa573ffffffffffffffffffffffffffffffffffffffff8716333085612770565b612004565b73ffffffffffffffffffffffffffffffffffffffff8616158015611fcd57508134105b15612004576040517f07da6ee600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116906396f4e9f990881615612051576000612053565b835b8b866040518463ffffffff1660e01b8152600401612072929190613e55565b60206040518083038185885af1158015612090573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120b59190613f22565b60008181526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a350505050949350505050565b61212d612139565b612136816127ce565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610dfb565b80158061225a57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122589190613f22565b155b6122e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610dfb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109b79084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526128c3565b806001166001036123fd576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612431565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b60008160405160200161244691815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181526009546000808552602085019093529093506109b79267ffffffffffffffff909116916124c0565b60408051808201909152600080825260208201528152602001906001900390816124995790505b506007548490610100900473ffffffffffffffffffffffffffffffffffffffff16611a2d565b60006124f283836129cf565b9392505050565b80471015612563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610dfb565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146125bd576040519150601f19603f3d011682016040523d82523d6000602084013e6125c2565b606091505b50509050806109b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610dfb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109b79084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612338565b60006126b6848484612a59565b949350505050565b60005b816080015151811015610a1a576000826080015182815181106126e6576126e6613676565b602002602001015160200151905060008360800151838151811061270c5761270c613676565b602002602001015160000151905061275a61273c60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff83169084612653565b50506001016126c1565b60006124f28383612a76565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261134b9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612338565b3373ffffffffffffffffffffffffffffffffffffffff82160361284d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610dfb565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612925826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612a939092919063ffffffff16565b8051909150156109b757808060200190518101906129439190613f3b565b6109b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610dfb565b6000818152600283016020526040812054801515806129f357506129f38484612aa2565b6124f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610dfb565b600082815260028401602052604081208290556126b68484612aae565b600081815260028301602052604081208190556124f28383612aba565b60606126b68484600085612ac6565b60006124f28383612bdf565b60006124f28383612bf7565b60006124f28383612c46565b606082471015612b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610dfb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612b819190613748565b60006040518083038185875af1925050503d8060008114612bbe576040519150601f19603f3d011682016040523d82523d6000602084013e612bc3565b606091505b5091509150612bd487838387612d39565b979650505050505050565b600081815260018301602052604081205415156124f2565b6000818152600183016020526040812054612c3e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109c9565b5060006109c9565b60008181526001830160205260408120548015612d2f576000612c6a600183613f58565b8554909150600090612c7e90600190613f58565b9050818114612ce3576000866000018281548110612c9e57612c9e613676565b9060005260206000200154905080876000018481548110612cc157612cc1613676565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612cf457612cf4613f6b565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109c9565b60009150506109c9565b60608315612dcf578251600003612dc85773ffffffffffffffffffffffffffffffffffffffff85163b612dc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dfb565b50816126b6565b6126b68383815115612de45781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb919061305c565b508054612e2490613623565b6000825580601f10612e34575050565b601f01602090049060005260206000209081019061213691905b80821115612e625760008155600101612e4e565b5090565b600060208284031215612e7857600080fd5b5035919050565b6020810160038310612eba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff8116811461213657600080fd5b60008083601f840112612ee857600080fd5b50813567ffffffffffffffff811115612f0057600080fd5b602083019150836020828501011115612f1857600080fd5b9250929050565b600080600060408486031215612f3457600080fd5b8335612f3f81612ec0565b9250602084013567ffffffffffffffff811115612f5b57600080fd5b612f6786828701612ed6565b9497909650939450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461213657600080fd5b8035612fa181612f74565b919050565b600060208284031215612fb857600080fd5b81356124f281612f74565b801515811461213657600080fd5b600060208284031215612fe357600080fd5b81356124f281612fc3565b60005b83811015613009578181015183820152602001612ff1565b50506000910152565b6000815180845261302a816020860160208601612fee565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124f26020830184613012565b60006020828403121561308157600080fd5b81356124f281612ec0565b6000806040838503121561309f57600080fd5b82356130aa81612f74565b946020939093013593505050565b6040815260006130cb6040830185613012565b82810360208401526130dd8185613012565b95945050505050565b6000806000606084860312156130fb57600080fd5b833561310681612f74565b9250602084013561311681612f74565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015613179578151805173ffffffffffffffffffffffffffffffffffffffff168852830151838801526040909601959082019060010161313c565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a060608401526131be60c0840182613012565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526131fa8383613012565b925060808601519150808584030160a0860152506130dd8282613127565b60008083601f84011261322a57600080fd5b50813567ffffffffffffffff81111561324257600080fd5b6020830191508360208260051b8501011115612f1857600080fd5b6000806000806040858703121561327357600080fd5b843567ffffffffffffffff8082111561328b57600080fd5b61329788838901613218565b909650945060208701359150808211156132b057600080fd5b506132bd87828801613218565b95989497509550505050565b6000602082840312156132db57600080fd5b813567ffffffffffffffff8111156132f257600080fd5b820160a081850312156124f257600080fd5b6000806040838503121561331757600080fd5b823561332281612ec0565b9150602083013561333281612f74565b809150509250929050565b60008060008060006060868803121561335557600080fd5b853561336081612ec0565b9450602086013567ffffffffffffffff8082111561337d57600080fd5b61338989838a01612ed6565b909650945060408801359150808211156133a257600080fd5b506133af88828901612ed6565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613412576134126133c0565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561345f5761345f6133c0565b604052919050565b600082601f83011261347857600080fd5b813567ffffffffffffffff811115613492576134926133c0565b6134c360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613418565b8181528460208386010111156134d857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561350b57600080fd5b843561351681612ec0565b935060208581013567ffffffffffffffff8082111561353457600080fd5b818801915088601f83011261354857600080fd5b81358181111561355a5761355a6133c0565b613568848260051b01613418565b81815260069190911b8301840190848101908b83111561358757600080fd5b938501935b828510156135d3576040858d0312156135a55760008081fd5b6135ad6133ef565b85356135b881612f74565b8152858701358782015282526040909401939085019061358c565b9750505060408801359250808311156135eb57600080fd5b50506135f987828801613467565b92505061360860608601612f96565b905092959194509250565b8183823760009101908152919050565b600181811c9082168061363757607f821691505b602082108103613670577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126136d957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261371857600080fd5b83018035915067ffffffffffffffff82111561373357600080fd5b602001915036819003821315612f1857600080fd5b600082516136d9818460208701612fee565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261378f57600080fd5b830160208101925035905067ffffffffffffffff8111156137af57600080fd5b803603821315612f1857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b8581101561317957813561382a81612f74565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613817565b60208152813560208201526000602083013561387781612ec0565b67ffffffffffffffff8082166040850152613895604086018661375a565b925060a060608601526138ac60c0860184836137be565b9250506138bc606086018661375a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808786030160808801526138f28583856137be565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261392b57600080fd5b6020928801928301923591508382111561394457600080fd5b8160061b360383131561395657600080fd5b8685030160a0870152612bd4848284613807565b601f8211156109b7576000816000526020600020601f850160051c810160208610156139935750805b601f850160051c820191505b818110156117a75782815560010161399f565b67ffffffffffffffff8311156139ca576139ca6133c0565b6139de836139d88354613623565b8361396a565b6000601f841160018114613a3057600085156139fa5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561105a565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613a7f5786850135825560209485019460019092019101613a5f565b5086821015613aba577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8135613b0681612f74565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b68010000000000000000831115613b6c57613b6c6133c0565b805483825580841015613bf95760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168314613bad57613bad613acc565b8086168614613bbe57613bbe613acc565b5060008360005260206000208360011b81018760011b820191505b80821015613bf4578282558284830155600282019150613bd9565b505050505b5060008181526020812083915b858110156117a757613c188383613afb565b6040929092019160029190910190600101613c06565b81358155600181016020830135613c4481612ec0565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000845416178355613c8460408601866136e3565b93509150613c968383600287016139b2565b613ca360608601866136e3565b93509150613cb58383600387016139b2565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018312613cec57600080fd5b918401918235915080821115613d0157600080fd5b506020820191508060061b3603821315613d1a57600080fd5b61134b818360048601613b53565b815167ffffffffffffffff811115613d4257613d426133c0565b613d5681613d508454613623565b8461396a565b602080601f831160018114613da95760008415613d735750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556117a7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613df657888601518255948401946001909101908401613dd7565b5085821015613e3257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156109c9576109c9613acc565b67ffffffffffffffff83168152604060208201526000825160a06040840152613e8160e0840182613012565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080858403016060860152613ebd8383613012565b92506040860151915080858403016080860152613eda8383613127565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c086015250613f188282613012565b9695505050505050565b600060208284031215613f3457600080fd5b5051919050565b600060208284031215613f4d57600080fd5b81516124f281612fc3565b818103818111156109c9576109c9613acc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var PingPongDemoABI = PingPongDemoMetaData.ABI @@ -184,6 +189,28 @@ func (_PingPongDemo *PingPongDemoTransactorRaw) Transact(opts *bind.TransactOpts return _PingPongDemo.Contract.contract.Transact(opts, method, params...) } +func (_PingPongDemo *PingPongDemoCaller) ACKMESSAGEMAGICBYTES(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "ACKMESSAGEMAGICBYTES") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) ACKMESSAGEMAGICBYTES() ([]byte, error) { + return _PingPongDemo.Contract.ACKMESSAGEMAGICBYTES(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) ACKMESSAGEMAGICBYTES() ([]byte, error) { + return _PingPongDemo.Contract.ACKMESSAGEMAGICBYTES(&_PingPongDemo.CallOpts) +} + func (_PingPongDemo *PingPongDemoCaller) GetCounterpartAddress(opts *bind.CallOpts) (common.Address, error) { var out []interface{} err := _PingPongDemo.contract.Call(opts, &out, "getCounterpartAddress") @@ -228,26 +255,48 @@ func (_PingPongDemo *PingPongDemoCallerSession) GetCounterpartChainSelector() (u return _PingPongDemo.Contract.GetCounterpartChainSelector(&_PingPongDemo.CallOpts) } -func (_PingPongDemo *PingPongDemoCaller) GetFeeToken(opts *bind.CallOpts) (common.Address, error) { +func (_PingPongDemo *PingPongDemoCaller) GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) { var out []interface{} - err := _PingPongDemo.contract.Call(opts, &out, "getFeeToken") + err := _PingPongDemo.contract.Call(opts, &out, "getMessageContents", messageId) if err != nil { - return *new(common.Address), err + return *new(ClientAny2EVMMessage), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(ClientAny2EVMMessage)).(*ClientAny2EVMMessage) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _PingPongDemo.Contract.GetMessageContents(&_PingPongDemo.CallOpts, messageId) +} + +func (_PingPongDemo *PingPongDemoCallerSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _PingPongDemo.Contract.GetMessageContents(&_PingPongDemo.CallOpts, messageId) +} + +func (_PingPongDemo *PingPongDemoCaller) GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "getMessageStatus", messageId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -func (_PingPongDemo *PingPongDemoSession) GetFeeToken() (common.Address, error) { - return _PingPongDemo.Contract.GetFeeToken(&_PingPongDemo.CallOpts) +func (_PingPongDemo *PingPongDemoSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _PingPongDemo.Contract.GetMessageStatus(&_PingPongDemo.CallOpts, messageId) } -func (_PingPongDemo *PingPongDemoCallerSession) GetFeeToken() (common.Address, error) { - return _PingPongDemo.Contract.GetFeeToken(&_PingPongDemo.CallOpts) +func (_PingPongDemo *PingPongDemoCallerSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _PingPongDemo.Contract.GetMessageStatus(&_PingPongDemo.CallOpts, messageId) } func (_PingPongDemo *PingPongDemoCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { @@ -272,6 +321,28 @@ func (_PingPongDemo *PingPongDemoCallerSession) GetRouter() (common.Address, err return _PingPongDemo.Contract.GetRouter(&_PingPongDemo.CallOpts) } +func (_PingPongDemo *PingPongDemoCaller) IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "isApprovedSender", sourceChainSelector, senderAddr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _PingPongDemo.Contract.IsApprovedSender(&_PingPongDemo.CallOpts, sourceChainSelector, senderAddr) +} + +func (_PingPongDemo *PingPongDemoCallerSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _PingPongDemo.Contract.IsApprovedSender(&_PingPongDemo.CallOpts, sourceChainSelector, senderAddr) +} + func (_PingPongDemo *PingPongDemoCaller) IsPaused(opts *bind.CallOpts) (bool, error) { var out []interface{} err := _PingPongDemo.contract.Call(opts, &out, "isPaused") @@ -316,26 +387,78 @@ func (_PingPongDemo *PingPongDemoCallerSession) Owner() (common.Address, error) return _PingPongDemo.Contract.Owner(&_PingPongDemo.CallOpts) } -func (_PingPongDemo *PingPongDemoCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { +func (_PingPongDemo *PingPongDemoCaller) SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) { var out []interface{} - err := _PingPongDemo.contract.Call(opts, &out, "supportsInterface", interfaceId) + err := _PingPongDemo.contract.Call(opts, &out, "s_chains", arg0) + outstruct := new(SChains) if err != nil { - return *new(bool), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.Recipient = *abi.ConvertType(out[0], new([]byte)).(*[]byte) + outstruct.ExtraArgsBytes = *abi.ConvertType(out[1], new([]byte)).(*[]byte) + + return *outstruct, err + +} + +func (_PingPongDemo *PingPongDemoSession) SChains(arg0 uint64) (SChains, + + error) { + return _PingPongDemo.Contract.SChains(&_PingPongDemo.CallOpts, arg0) +} + +func (_PingPongDemo *PingPongDemoCallerSession) SChains(arg0 uint64) (SChains, + + error) { + return _PingPongDemo.Contract.SChains(&_PingPongDemo.CallOpts, arg0) +} + +func (_PingPongDemo *PingPongDemoCaller) SFeeToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "s_feeToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) SFeeToken() (common.Address, error) { + return _PingPongDemo.Contract.SFeeToken(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) SFeeToken() (common.Address, error) { + return _PingPongDemo.Contract.SFeeToken(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCaller) SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "s_messageStatus", messageId) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) return out0, err } -func (_PingPongDemo *PingPongDemoSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _PingPongDemo.Contract.SupportsInterface(&_PingPongDemo.CallOpts, interfaceId) +func (_PingPongDemo *PingPongDemoSession) SMessageStatus(messageId [32]byte) (uint8, error) { + return _PingPongDemo.Contract.SMessageStatus(&_PingPongDemo.CallOpts, messageId) } -func (_PingPongDemo *PingPongDemoCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _PingPongDemo.Contract.SupportsInterface(&_PingPongDemo.CallOpts, interfaceId) +func (_PingPongDemo *PingPongDemoCallerSession) SMessageStatus(messageId [32]byte) (uint8, error) { + return _PingPongDemo.Contract.SMessageStatus(&_PingPongDemo.CallOpts, messageId) } func (_PingPongDemo *PingPongDemoCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { @@ -384,6 +507,78 @@ func (_PingPongDemo *PingPongDemoTransactorSession) CcipReceive(message ClientAn return _PingPongDemo.Contract.CcipReceive(&_PingPongDemo.TransactOpts, message) } +func (_PingPongDemo *PingPongDemoTransactor) CcipSend(opts *bind.TransactOpts, destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "ccipSend", destChainSelector, tokenAmounts, data, feeToken) +} + +func (_PingPongDemo *PingPongDemoSession) CcipSend(destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.CcipSend(&_PingPongDemo.TransactOpts, destChainSelector, tokenAmounts, data, feeToken) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) CcipSend(destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.CcipSend(&_PingPongDemo.TransactOpts, destChainSelector, tokenAmounts, data, feeToken) +} + +func (_PingPongDemo *PingPongDemoTransactor) DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "disableChain", chainSelector) +} + +func (_PingPongDemo *PingPongDemoSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _PingPongDemo.Contract.DisableChain(&_PingPongDemo.TransactOpts, chainSelector) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _PingPongDemo.Contract.DisableChain(&_PingPongDemo.TransactOpts, chainSelector) +} + +func (_PingPongDemo *PingPongDemoTransactor) EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "enableChain", chainSelector, recipient, _extraArgsBytes) +} + +func (_PingPongDemo *PingPongDemoSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _PingPongDemo.Contract.EnableChain(&_PingPongDemo.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _PingPongDemo.Contract.EnableChain(&_PingPongDemo.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_PingPongDemo *PingPongDemoTransactor) ModifyFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "modifyFeeToken", token) +} + +func (_PingPongDemo *PingPongDemoSession) ModifyFeeToken(token common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.ModifyFeeToken(&_PingPongDemo.TransactOpts, token) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) ModifyFeeToken(token common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.ModifyFeeToken(&_PingPongDemo.TransactOpts, token) +} + +func (_PingPongDemo *PingPongDemoTransactor) ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "processMessage", message) +} + +func (_PingPongDemo *PingPongDemoSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _PingPongDemo.Contract.ProcessMessage(&_PingPongDemo.TransactOpts, message) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _PingPongDemo.Contract.ProcessMessage(&_PingPongDemo.TransactOpts, message) +} + +func (_PingPongDemo *PingPongDemoTransactor) RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "retryFailedMessage", messageId) +} + +func (_PingPongDemo *PingPongDemoSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _PingPongDemo.Contract.RetryFailedMessage(&_PingPongDemo.TransactOpts, messageId) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _PingPongDemo.Contract.RetryFailedMessage(&_PingPongDemo.TransactOpts, messageId) +} + func (_PingPongDemo *PingPongDemoTransactor) SetCounterpart(opts *bind.TransactOpts, counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { return _PingPongDemo.contract.Transact(opts, "setCounterpart", counterpartChainSelector, counterpartAddress) } @@ -396,28 +591,28 @@ func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpart(counterpartCh return _PingPongDemo.Contract.SetCounterpart(&_PingPongDemo.TransactOpts, counterpartChainSelector, counterpartAddress) } -func (_PingPongDemo *PingPongDemoTransactor) SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _PingPongDemo.contract.Transact(opts, "setCounterpartAddress", addr) +func (_PingPongDemo *PingPongDemoTransactor) SetCounterpartAddress(opts *bind.TransactOpts, counterpartAddress common.Address) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "setCounterpartAddress", counterpartAddress) } -func (_PingPongDemo *PingPongDemoSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { - return _PingPongDemo.Contract.SetCounterpartAddress(&_PingPongDemo.TransactOpts, addr) +func (_PingPongDemo *PingPongDemoSession) SetCounterpartAddress(counterpartAddress common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpartAddress(&_PingPongDemo.TransactOpts, counterpartAddress) } -func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { - return _PingPongDemo.Contract.SetCounterpartAddress(&_PingPongDemo.TransactOpts, addr) +func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpartAddress(counterpartAddress common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpartAddress(&_PingPongDemo.TransactOpts, counterpartAddress) } -func (_PingPongDemo *PingPongDemoTransactor) SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { - return _PingPongDemo.contract.Transact(opts, "setCounterpartChainSelector", chainSelector) +func (_PingPongDemo *PingPongDemoTransactor) SetCounterpartChainSelector(opts *bind.TransactOpts, counterpartChainSelector uint64) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "setCounterpartChainSelector", counterpartChainSelector) } -func (_PingPongDemo *PingPongDemoSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { - return _PingPongDemo.Contract.SetCounterpartChainSelector(&_PingPongDemo.TransactOpts, chainSelector) +func (_PingPongDemo *PingPongDemoSession) SetCounterpartChainSelector(counterpartChainSelector uint64) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpartChainSelector(&_PingPongDemo.TransactOpts, counterpartChainSelector) } -func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { - return _PingPongDemo.Contract.SetCounterpartChainSelector(&_PingPongDemo.TransactOpts, chainSelector) +func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpartChainSelector(counterpartChainSelector uint64) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpartChainSelector(&_PingPongDemo.TransactOpts, counterpartChainSelector) } func (_PingPongDemo *PingPongDemoTransactor) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) { @@ -432,6 +627,18 @@ func (_PingPongDemo *PingPongDemoTransactorSession) SetPaused(pause bool) (*type return _PingPongDemo.Contract.SetPaused(&_PingPongDemo.TransactOpts, pause) } +func (_PingPongDemo *PingPongDemoTransactor) SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "setSimRevert", simRevert) +} + +func (_PingPongDemo *PingPongDemoSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetSimRevert(&_PingPongDemo.TransactOpts, simRevert) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetSimRevert(&_PingPongDemo.TransactOpts, simRevert) +} + func (_PingPongDemo *PingPongDemoTransactor) StartPingPong(opts *bind.TransactOpts) (*types.Transaction, error) { return _PingPongDemo.contract.Transact(opts, "startPingPong") } @@ -456,8 +663,68 @@ func (_PingPongDemo *PingPongDemoTransactorSession) TransferOwnership(to common. return _PingPongDemo.Contract.TransferOwnership(&_PingPongDemo.TransactOpts, to) } -type PingPongDemoOwnershipTransferRequestedIterator struct { - Event *PingPongDemoOwnershipTransferRequested +func (_PingPongDemo *PingPongDemoTransactor) UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "updateApprovedSenders", adds, removes) +} + +func (_PingPongDemo *PingPongDemoSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _PingPongDemo.Contract.UpdateApprovedSenders(&_PingPongDemo.TransactOpts, adds, removes) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _PingPongDemo.Contract.UpdateApprovedSenders(&_PingPongDemo.TransactOpts, adds, removes) +} + +func (_PingPongDemo *PingPongDemoTransactor) WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "withdrawNativeToken", to, amount) +} + +func (_PingPongDemo *PingPongDemoSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _PingPongDemo.Contract.WithdrawNativeToken(&_PingPongDemo.TransactOpts, to, amount) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _PingPongDemo.Contract.WithdrawNativeToken(&_PingPongDemo.TransactOpts, to, amount) +} + +func (_PingPongDemo *PingPongDemoTransactor) WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "withdrawTokens", token, to, amount) +} + +func (_PingPongDemo *PingPongDemoSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _PingPongDemo.Contract.WithdrawTokens(&_PingPongDemo.TransactOpts, token, to, amount) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _PingPongDemo.Contract.WithdrawTokens(&_PingPongDemo.TransactOpts, token, to, amount) +} + +func (_PingPongDemo *PingPongDemoTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _PingPongDemo.contract.RawTransact(opts, calldata) +} + +func (_PingPongDemo *PingPongDemoSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _PingPongDemo.Contract.Fallback(&_PingPongDemo.TransactOpts, calldata) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _PingPongDemo.Contract.Fallback(&_PingPongDemo.TransactOpts, calldata) +} + +func (_PingPongDemo *PingPongDemoTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PingPongDemo.contract.RawTransact(opts, nil) +} + +func (_PingPongDemo *PingPongDemoSession) Receive() (*types.Transaction, error) { + return _PingPongDemo.Contract.Receive(&_PingPongDemo.TransactOpts) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) Receive() (*types.Transaction, error) { + return _PingPongDemo.Contract.Receive(&_PingPongDemo.TransactOpts) +} + +type PingPongDemoFeeTokenModifiedIterator struct { + Event *PingPongDemoFeeTokenModified contract *bind.BoundContract event string @@ -468,7 +735,7 @@ type PingPongDemoOwnershipTransferRequestedIterator struct { fail error } -func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { +func (it *PingPongDemoFeeTokenModifiedIterator) Next() bool { if it.fail != nil { return false @@ -477,7 +744,7 @@ func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoOwnershipTransferRequested) + it.Event = new(PingPongDemoFeeTokenModified) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -492,7 +759,7 @@ func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoOwnershipTransferRequested) + it.Event = new(PingPongDemoFeeTokenModified) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -507,51 +774,51 @@ func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { } } -func (it *PingPongDemoOwnershipTransferRequestedIterator) Error() error { +func (it *PingPongDemoFeeTokenModifiedIterator) Error() error { return it.fail } -func (it *PingPongDemoOwnershipTransferRequestedIterator) Close() error { +func (it *PingPongDemoFeeTokenModifiedIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoOwnershipTransferRequested struct { - From common.Address - To common.Address - Raw types.Log +type PingPongDemoFeeTokenModified struct { + OldToken common.Address + NewToken common.Address + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferRequestedIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterFeeTokenModified(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*PingPongDemoFeeTokenModifiedIterator, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) + var oldTokenRule []interface{} + for _, oldTokenItem := range oldToken { + oldTokenRule = append(oldTokenRule, oldTokenItem) } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var newTokenRule []interface{} + for _, newTokenItem := range newToken { + newTokenRule = append(newTokenRule, newTokenItem) } - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "FeeTokenModified", oldTokenRule, newTokenRule) if err != nil { return nil, err } - return &PingPongDemoOwnershipTransferRequestedIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil + return &PingPongDemoFeeTokenModifiedIterator{contract: _PingPongDemo.contract, event: "FeeTokenModified", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchFeeTokenModified(opts *bind.WatchOpts, sink chan<- *PingPongDemoFeeTokenModified, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) + var oldTokenRule []interface{} + for _, oldTokenItem := range oldToken { + oldTokenRule = append(oldTokenRule, oldTokenItem) } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var newTokenRule []interface{} + for _, newTokenItem := range newToken { + newTokenRule = append(newTokenRule, newTokenItem) } - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "FeeTokenModified", oldTokenRule, newTokenRule) if err != nil { return nil, err } @@ -561,8 +828,8 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferRequested(opts select { case log := <-logs: - event := new(PingPongDemoOwnershipTransferRequested) - if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + event := new(PingPongDemoFeeTokenModified) + if err := _PingPongDemo.contract.UnpackLog(event, "FeeTokenModified", log); err != nil { return err } event.Raw = log @@ -583,17 +850,17 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferRequested(opts }), nil } -func (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferRequested(log types.Log) (*PingPongDemoOwnershipTransferRequested, error) { - event := new(PingPongDemoOwnershipTransferRequested) - if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { +func (_PingPongDemo *PingPongDemoFilterer) ParseFeeTokenModified(log types.Log) (*PingPongDemoFeeTokenModified, error) { + event := new(PingPongDemoFeeTokenModified) + if err := _PingPongDemo.contract.UnpackLog(event, "FeeTokenModified", log); err != nil { return nil, err } event.Raw = log return event, nil } -type PingPongDemoOwnershipTransferredIterator struct { - Event *PingPongDemoOwnershipTransferred +type PingPongDemoMessageAckReceivedIterator struct { + Event *PingPongDemoMessageAckReceived contract *bind.BoundContract event string @@ -604,7 +871,7 @@ type PingPongDemoOwnershipTransferredIterator struct { fail error } -func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { +func (it *PingPongDemoMessageAckReceivedIterator) Next() bool { if it.fail != nil { return false @@ -613,7 +880,7 @@ func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoOwnershipTransferred) + it.Event = new(PingPongDemoMessageAckReceived) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -628,7 +895,7 @@ func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoOwnershipTransferred) + it.Event = new(PingPongDemoMessageAckReceived) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -643,51 +910,32 @@ func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { } } -func (it *PingPongDemoOwnershipTransferredIterator) Error() error { +func (it *PingPongDemoMessageAckReceivedIterator) Error() error { return it.fail } -func (it *PingPongDemoOwnershipTransferredIterator) Close() error { +func (it *PingPongDemoMessageAckReceivedIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoOwnershipTransferred struct { - From common.Address - To common.Address +type PingPongDemoMessageAckReceived struct { + Arg0 [32]byte Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferredIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageAckReceived(opts *bind.FilterOpts) (*PingPongDemoMessageAckReceivedIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageAckReceived") if err != nil { return nil, err } - return &PingPongDemoOwnershipTransferredIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil + return &PingPongDemoMessageAckReceivedIterator{contract: _PingPongDemo.contract, event: "MessageAckReceived", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAckReceived) (event.Subscription, error) { - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageAckReceived") if err != nil { return nil, err } @@ -697,8 +945,8 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferred(opts *bind. select { case log := <-logs: - event := new(PingPongDemoOwnershipTransferred) - if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + event := new(PingPongDemoMessageAckReceived) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageAckReceived", log); err != nil { return err } event.Raw = log @@ -719,17 +967,17 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferred(opts *bind. }), nil } -func (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferred(log types.Log) (*PingPongDemoOwnershipTransferred, error) { - event := new(PingPongDemoOwnershipTransferred) - if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { +func (_PingPongDemo *PingPongDemoFilterer) ParseMessageAckReceived(log types.Log) (*PingPongDemoMessageAckReceived, error) { + event := new(PingPongDemoMessageAckReceived) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageAckReceived", log); err != nil { return nil, err } event.Raw = log return event, nil } -type PingPongDemoPingIterator struct { - Event *PingPongDemoPing +type PingPongDemoMessageAckSentIterator struct { + Event *PingPongDemoMessageAckSent contract *bind.BoundContract event string @@ -740,7 +988,7 @@ type PingPongDemoPingIterator struct { fail error } -func (it *PingPongDemoPingIterator) Next() bool { +func (it *PingPongDemoMessageAckSentIterator) Next() bool { if it.fail != nil { return false @@ -749,7 +997,7 @@ func (it *PingPongDemoPingIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoPing) + it.Event = new(PingPongDemoMessageAckSent) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -764,7 +1012,7 @@ func (it *PingPongDemoPingIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoPing) + it.Event = new(PingPongDemoMessageAckSent) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -779,32 +1027,32 @@ func (it *PingPongDemoPingIterator) Next() bool { } } -func (it *PingPongDemoPingIterator) Error() error { +func (it *PingPongDemoMessageAckSentIterator) Error() error { return it.fail } -func (it *PingPongDemoPingIterator) Close() error { +func (it *PingPongDemoMessageAckSentIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoPing struct { - PingPongCount *big.Int - Raw types.Log +type PingPongDemoMessageAckSent struct { + IncomingMessageId [32]byte + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterPing(opts *bind.FilterOpts) (*PingPongDemoPingIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageAckSent(opts *bind.FilterOpts) (*PingPongDemoMessageAckSentIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "Ping") + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageAckSent") if err != nil { return nil, err } - return &PingPongDemoPingIterator{contract: _PingPongDemo.contract, event: "Ping", logs: logs, sub: sub}, nil + return &PingPongDemoMessageAckSentIterator{contract: _PingPongDemo.contract, event: "MessageAckSent", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchPing(opts *bind.WatchOpts, sink chan<- *PingPongDemoPing) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAckSent) (event.Subscription, error) { - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "Ping") + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageAckSent") if err != nil { return nil, err } @@ -814,8 +1062,8 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchPing(opts *bind.WatchOpts, sink select { case log := <-logs: - event := new(PingPongDemoPing) - if err := _PingPongDemo.contract.UnpackLog(event, "Ping", log); err != nil { + event := new(PingPongDemoMessageAckSent) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageAckSent", log); err != nil { return err } event.Raw = log @@ -836,17 +1084,17 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchPing(opts *bind.WatchOpts, sink }), nil } -func (_PingPongDemo *PingPongDemoFilterer) ParsePing(log types.Log) (*PingPongDemoPing, error) { - event := new(PingPongDemoPing) - if err := _PingPongDemo.contract.UnpackLog(event, "Ping", log); err != nil { +func (_PingPongDemo *PingPongDemoFilterer) ParseMessageAckSent(log types.Log) (*PingPongDemoMessageAckSent, error) { + event := new(PingPongDemoMessageAckSent) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageAckSent", log); err != nil { return nil, err } event.Raw = log return event, nil } -type PingPongDemoPongIterator struct { - Event *PingPongDemoPong +type PingPongDemoMessageFailedIterator struct { + Event *PingPongDemoMessageFailed contract *bind.BoundContract event string @@ -857,7 +1105,7 @@ type PingPongDemoPongIterator struct { fail error } -func (it *PingPongDemoPongIterator) Next() bool { +func (it *PingPongDemoMessageFailedIterator) Next() bool { if it.fail != nil { return false @@ -866,7 +1114,7 @@ func (it *PingPongDemoPongIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoPong) + it.Event = new(PingPongDemoMessageFailed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -881,7 +1129,7 @@ func (it *PingPongDemoPongIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoPong) + it.Event = new(PingPongDemoMessageFailed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -896,21 +1144,928 @@ func (it *PingPongDemoPongIterator) Next() bool { } } -func (it *PingPongDemoPongIterator) Error() error { +func (it *PingPongDemoMessageFailedIterator) Error() error { return it.fail } -func (it *PingPongDemoPongIterator) Close() error { +func (it *PingPongDemoMessageFailedIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoPong struct { - PingPongCount *big.Int - Raw types.Log +type PingPongDemoMessageFailed struct { + MessageId [32]byte + Reason []byte + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterPong(opts *bind.FilterOpts) (*PingPongDemoPongIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageFailedIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return &PingPongDemoMessageFailedIterator{contract: _PingPongDemo.contract, event: "MessageFailed", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageFailed, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoMessageFailed) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageFailed", 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 (_PingPongDemo *PingPongDemoFilterer) ParseMessageFailed(log types.Log) (*PingPongDemoMessageFailed, error) { + event := new(PingPongDemoMessageFailed) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoMessageRecoveredIterator struct { + Event *PingPongDemoMessageRecovered + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoMessageRecoveredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageRecovered) + 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(PingPongDemoMessageRecovered) + 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 *PingPongDemoMessageRecoveredIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoMessageRecoveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoMessageRecovered struct { + MessageId [32]byte + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageRecoveredIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return &PingPongDemoMessageRecoveredIterator{contract: _PingPongDemo.contract, event: "MessageRecovered", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageRecovered, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoMessageRecovered) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageRecovered", 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 (_PingPongDemo *PingPongDemoFilterer) ParseMessageRecovered(log types.Log) (*PingPongDemoMessageRecovered, error) { + event := new(PingPongDemoMessageRecovered) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageRecovered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoMessageSentIterator struct { + Event *PingPongDemoMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageSent) + 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(PingPongDemoMessageSent) + 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 *PingPongDemoMessageSentIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoMessageSent struct { + IncomingMessageId [32]byte + ACKMessageId [32]byte + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*PingPongDemoMessageSentIterator, error) { + + var incomingMessageIdRule []interface{} + for _, incomingMessageIdItem := range incomingMessageId { + incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) + } + var ACKMessageIdRule []interface{} + for _, ACKMessageIdItem := range ACKMessageId { + ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + if err != nil { + return nil, err + } + return &PingPongDemoMessageSentIterator{contract: _PingPongDemo.contract, event: "MessageSent", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) { + + var incomingMessageIdRule []interface{} + for _, incomingMessageIdItem := range incomingMessageId { + incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) + } + var ACKMessageIdRule []interface{} + for _, ACKMessageIdItem := range ACKMessageId { + ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoMessageSent) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageSent", 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 (_PingPongDemo *PingPongDemoFilterer) ParseMessageSent(log types.Log) (*PingPongDemoMessageSent, error) { + event := new(PingPongDemoMessageSent) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoMessageSucceededIterator struct { + Event *PingPongDemoMessageSucceeded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoMessageSucceededIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageSucceeded) + 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(PingPongDemoMessageSucceeded) + 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 *PingPongDemoMessageSucceededIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoMessageSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoMessageSucceeded struct { + MessageId [32]byte + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageSucceededIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return &PingPongDemoMessageSucceededIterator{contract: _PingPongDemo.contract, event: "MessageSucceeded", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSucceeded, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoMessageSucceeded) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageSucceeded", 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 (_PingPongDemo *PingPongDemoFilterer) ParseMessageSucceeded(log types.Log) (*PingPongDemoMessageSucceeded, error) { + event := new(PingPongDemoMessageSucceeded) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoOwnershipTransferRequestedIterator struct { + Event *PingPongDemoOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferRequested) + 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(PingPongDemoOwnershipTransferRequested) + 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 *PingPongDemoOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &PingPongDemoOwnershipTransferRequestedIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoOwnershipTransferRequested) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", 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 (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferRequested(log types.Log) (*PingPongDemoOwnershipTransferRequested, error) { + event := new(PingPongDemoOwnershipTransferRequested) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoOwnershipTransferredIterator struct { + Event *PingPongDemoOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferred) + 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(PingPongDemoOwnershipTransferred) + 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 *PingPongDemoOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &PingPongDemoOwnershipTransferredIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoOwnershipTransferred) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferred", 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 (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferred(log types.Log) (*PingPongDemoOwnershipTransferred, error) { + event := new(PingPongDemoOwnershipTransferred) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoPingIterator struct { + Event *PingPongDemoPing + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoPingIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPing) + 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(PingPongDemoPing) + 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 *PingPongDemoPingIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoPingIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoPing struct { + PingPongCount *big.Int + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterPing(opts *bind.FilterOpts) (*PingPongDemoPingIterator, error) { + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "Ping") + if err != nil { + return nil, err + } + return &PingPongDemoPingIterator{contract: _PingPongDemo.contract, event: "Ping", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchPing(opts *bind.WatchOpts, sink chan<- *PingPongDemoPing) (event.Subscription, error) { + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "Ping") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoPing) + if err := _PingPongDemo.contract.UnpackLog(event, "Ping", 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 (_PingPongDemo *PingPongDemoFilterer) ParsePing(log types.Log) (*PingPongDemoPing, error) { + event := new(PingPongDemoPing) + if err := _PingPongDemo.contract.UnpackLog(event, "Ping", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoPongIterator struct { + Event *PingPongDemoPong + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoPongIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPong) + 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(PingPongDemoPong) + 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 *PingPongDemoPongIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoPongIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoPong struct { + PingPongCount *big.Int + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterPong(opts *bind.FilterOpts) (*PingPongDemoPongIterator, error) { logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "Pong") if err != nil { @@ -962,8 +2117,27 @@ func (_PingPongDemo *PingPongDemoFilterer) ParsePong(log types.Log) (*PingPongDe return event, nil } +type SChains struct { + Recipient []byte + ExtraArgsBytes []byte +} + func (_PingPongDemo *PingPongDemo) ParseLog(log types.Log) (generated.AbigenLog, error) { switch log.Topics[0] { + case _PingPongDemo.abi.Events["FeeTokenModified"].ID: + return _PingPongDemo.ParseFeeTokenModified(log) + case _PingPongDemo.abi.Events["MessageAckReceived"].ID: + return _PingPongDemo.ParseMessageAckReceived(log) + case _PingPongDemo.abi.Events["MessageAckSent"].ID: + return _PingPongDemo.ParseMessageAckSent(log) + case _PingPongDemo.abi.Events["MessageFailed"].ID: + return _PingPongDemo.ParseMessageFailed(log) + case _PingPongDemo.abi.Events["MessageRecovered"].ID: + return _PingPongDemo.ParseMessageRecovered(log) + case _PingPongDemo.abi.Events["MessageSent"].ID: + return _PingPongDemo.ParseMessageSent(log) + case _PingPongDemo.abi.Events["MessageSucceeded"].ID: + return _PingPongDemo.ParseMessageSucceeded(log) case _PingPongDemo.abi.Events["OwnershipTransferRequested"].ID: return _PingPongDemo.ParseOwnershipTransferRequested(log) case _PingPongDemo.abi.Events["OwnershipTransferred"].ID: @@ -978,6 +2152,34 @@ func (_PingPongDemo *PingPongDemo) ParseLog(log types.Log) (generated.AbigenLog, } } +func (PingPongDemoFeeTokenModified) Topic() common.Hash { + return common.HexToHash("0x4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e") +} + +func (PingPongDemoMessageAckReceived) Topic() common.Hash { + return common.HexToHash("0xef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79") +} + +func (PingPongDemoMessageAckSent) Topic() common.Hash { + return common.HexToHash("0x75944f95ba0be568cb30faeb0ef135cb73d07006939da29722d670a97f5c5b26") +} + +func (PingPongDemoMessageFailed) Topic() common.Hash { + return common.HexToHash("0x55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f") +} + +func (PingPongDemoMessageRecovered) Topic() common.Hash { + return common.HexToHash("0xef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad") +} + +func (PingPongDemoMessageSent) Topic() common.Hash { + return common.HexToHash("0x9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372") +} + +func (PingPongDemoMessageSucceeded) Topic() common.Hash { + return common.HexToHash("0xdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f") +} + func (PingPongDemoOwnershipTransferRequested) Topic() common.Hash { return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") } @@ -999,19 +2201,31 @@ func (_PingPongDemo *PingPongDemo) Address() common.Address { } type PingPongDemoInterface interface { + ACKMESSAGEMAGICBYTES(opts *bind.CallOpts) ([]byte, error) + GetCounterpartAddress(opts *bind.CallOpts) (common.Address, error) GetCounterpartChainSelector(opts *bind.CallOpts) (uint64, error) - GetFeeToken(opts *bind.CallOpts) (common.Address, error) + GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) + + GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) GetRouter(opts *bind.CallOpts) (common.Address, error) + IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) + IsPaused(opts *bind.CallOpts) (bool, error) Owner(opts *bind.CallOpts) (common.Address, error) - SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) + + SFeeToken(opts *bind.CallOpts) (common.Address, error) + + SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) TypeAndVersion(opts *bind.CallOpts) (string, error) @@ -1019,18 +2233,84 @@ type PingPongDemoInterface interface { CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + CcipSend(opts *bind.TransactOpts, destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) + + DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) + + EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) + + ModifyFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) + + ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) + SetCounterpart(opts *bind.TransactOpts, counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) - SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) + SetCounterpartAddress(opts *bind.TransactOpts, counterpartAddress common.Address) (*types.Transaction, error) - SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) + SetCounterpartChainSelector(opts *bind.TransactOpts, counterpartChainSelector uint64) (*types.Transaction, error) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) + SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) + StartPingPong(opts *bind.TransactOpts) (*types.Transaction, error) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) + + WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) + + WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + + Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterFeeTokenModified(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*PingPongDemoFeeTokenModifiedIterator, error) + + WatchFeeTokenModified(opts *bind.WatchOpts, sink chan<- *PingPongDemoFeeTokenModified, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) + + ParseFeeTokenModified(log types.Log) (*PingPongDemoFeeTokenModified, error) + + FilterMessageAckReceived(opts *bind.FilterOpts) (*PingPongDemoMessageAckReceivedIterator, error) + + WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAckReceived) (event.Subscription, error) + + ParseMessageAckReceived(log types.Log) (*PingPongDemoMessageAckReceived, error) + + FilterMessageAckSent(opts *bind.FilterOpts) (*PingPongDemoMessageAckSentIterator, error) + + WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAckSent) (event.Subscription, error) + + ParseMessageAckSent(log types.Log) (*PingPongDemoMessageAckSent, error) + + FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageFailedIterator, error) + + WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageFailed, messageId [][32]byte) (event.Subscription, error) + + ParseMessageFailed(log types.Log) (*PingPongDemoMessageFailed, error) + + FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageRecoveredIterator, error) + + WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageRecovered, messageId [][32]byte) (event.Subscription, error) + + ParseMessageRecovered(log types.Log) (*PingPongDemoMessageRecovered, error) + + FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*PingPongDemoMessageSentIterator, error) + + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) + + ParseMessageSent(log types.Log) (*PingPongDemoMessageSent, error) + + FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageSucceededIterator, error) + + WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSucceeded, messageId [][32]byte) (event.Subscription, error) + + ParseMessageSucceeded(log types.Log) (*PingPongDemoMessageSucceeded, error) + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferRequestedIterator, error) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) diff --git a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go index d6e2db6bf3..363268370b 100644 --- a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go +++ b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go @@ -43,9 +43,14 @@ type ClientEVMTokenAmount struct { Amount *big.Int } +type ICCIPClientBaseapprovedSenderUpdate struct { + DestChainSelector uint64 + Sender []byte +} + var SelfFundedPingPongMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b506040516200182238038062001822833981016040819052620000349162000291565b828233806000846001600160a01b0381166200006b576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b6001600160a01b039081166080528216620000c95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000604482015260640162000062565b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000fc57620000fc81620001cd565b50506002805460ff60a01b1916905550600380546001600160a01b0319166001600160a01b0383811691821790925560405163095ea7b360e01b8152918416600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001989190620002ea565b505050806002620001aa919062000315565b600360146101000a81548160ff021916908360ff16021790555050505062000347565b336001600160a01b03821603620002275760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000062565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200028e57600080fd5b50565b600080600060608486031215620002a757600080fd5b8351620002b48162000278565b6020850151909350620002c78162000278565b604085015190925060ff81168114620002df57600080fd5b809150509250925092565b600060208284031215620002fd57600080fd5b815180151581146200030e57600080fd5b9392505050565b60ff81811683821602908116908181146200034057634e487b7160e01b600052601160045260246000fd5b5092915050565b6080516114aa62000378600039600081816102970152818161063f0152818161072c0152610c2201526114aa6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80638f491cba116100cd578063bee518a411610081578063e6c725f511610066578063e6c725f51461034d578063ef686d8e1461037d578063f2fde38b1461039057600080fd5b8063bee518a4146102f1578063ca709a251461032f57600080fd5b8063b0f479a1116100b2578063b0f479a114610295578063b187bd26146102bb578063b5a11011146102de57600080fd5b80638f491cba1461026f5780639d2aede51461028257600080fd5b80632874d8bf1161012457806379ba50971161010957806379ba50971461023657806385572ffb1461023e5780638da5cb5b1461025157600080fd5b80632874d8bf146101ef5780632b6e5d63146101f757600080fd5b806301ffc9a71461015657806316c38b3c1461017e578063181f5a77146101935780631892b906146101dc575b600080fd5b610169610164366004610e24565b6103a3565b60405190151581526020015b60405180910390f35b61019161018c366004610e6d565b61043c565b005b6101cf6040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e322e30000000000000000081525081565b6040516101759190610ef3565b6101916101ea366004610f23565b61048e565b6101916104e9565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b610191610525565b61019161024c366004610f3e565b610627565b60005473ffffffffffffffffffffffffffffffffffffffff16610211565b61019161027d366004610f79565b6106ac565b610191610290366004610fb4565b61088b565b7f0000000000000000000000000000000000000000000000000000000000000000610211565b60025474010000000000000000000000000000000000000000900460ff16610169565b6101916102ec366004610fd1565b6108da565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff9091168152602001610175565b60035473ffffffffffffffffffffffffffffffffffffffff16610211565b60035474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610175565b61019161038b366004611008565b61097c565b61019161039e366004610fb4565b610a04565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061043657507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610444610a15565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b610496610a15565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104f1610a15565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556105236001610a96565b565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610698576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024016105a2565b6106a96106a482611230565b610cd9565b50565b60035474010000000000000000000000000000000000000000900460ff1615806106f2575060035474010000000000000000000000000000000000000000900460ff1681105b156106fa5750565b6003546001906107259074010000000000000000000000000000000000000000900460ff16836112dd565b116106a9577f00000000000000000000000000000000000000000000000000000000000000006001546040517fa8d87a3b0000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910467ffffffffffffffff16600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa1580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190611318565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561084757600080fd5b505af115801561085b573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a150565b610893610a15565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108e2610a15565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b610984610a15565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf39060200160405180910390a150565b610a0c610a15565b6106a981610d2f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016105a2565b80600116600103610ad9576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1610b0d565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b610b16816106ac565b6040805160a0810190915260025473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e08101604051602081830303815290604052815260200183604051602001610b6e91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905281526020016000604051908082528060200260200182016040528015610be857816020015b6040805180820190915260008082526020820152815260200190600190039081610bc15790505b50815260035473ffffffffffffffffffffffffffffffffffffffff16602080830191909152604080519182018152600082529091015290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166396f4e9f9600160149054906101000a900467ffffffffffffffff16836040518363ffffffff1660e01b8152600401610c91929190611335565b6020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd4919061144a565b505050565b60008160600151806020019051810190610cf3919061144a565b60025490915074010000000000000000000000000000000000000000900460ff16610d2b57610d2b610d26826001611463565b610a96565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610dae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016105a2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610e3657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e6657600080fd5b9392505050565b600060208284031215610e7f57600080fd5b81358015158114610e6657600080fd5b6000815180845260005b81811015610eb557602081850181015186830182015201610e99565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610e666020830184610e8f565b803567ffffffffffffffff81168114610f1e57600080fd5b919050565b600060208284031215610f3557600080fd5b610e6682610f06565b600060208284031215610f5057600080fd5b813567ffffffffffffffff811115610f6757600080fd5b820160a08185031215610e6657600080fd5b600060208284031215610f8b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106a957600080fd5b600060208284031215610fc657600080fd5b8135610e6681610f92565b60008060408385031215610fe457600080fd5b610fed83610f06565b91506020830135610ffd81610f92565b809150509250929050565b60006020828403121561101a57600080fd5b813560ff81168114610e6657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561107d5761107d61102b565b60405290565b60405160a0810167ffffffffffffffff8111828210171561107d5761107d61102b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156110ed576110ed61102b565b604052919050565b600082601f83011261110657600080fd5b813567ffffffffffffffff8111156111205761112061102b565b61115160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016110a6565b81815284602083860101111561116657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261119457600080fd5b8135602067ffffffffffffffff8211156111b0576111b061102b565b6111be818360051b016110a6565b82815260069290921b840181019181810190868411156111dd57600080fd5b8286015b8481101561122557604081890312156111fa5760008081fd5b61120261105a565b813561120d81610f92565b815281850135858201528352918301916040016111e1565b509695505050505050565b600060a0823603121561124257600080fd5b61124a611083565b8235815261125a60208401610f06565b6020820152604083013567ffffffffffffffff8082111561127a57600080fd5b611286368387016110f5565b6040840152606085013591508082111561129f57600080fd5b6112ab368387016110f5565b606084015260808501359150808211156112c457600080fd5b506112d136828601611183565b60808301525092915050565b600082611313577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60006020828403121561132a57600080fd5b8151610e6681610f92565b6000604067ffffffffffffffff851683526020604081850152845160a0604086015261136460e0860182610e8f565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08087840301606088015261139f8383610e8f565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015611400578451805173ffffffffffffffffffffffffffffffffffffffff168352860151868301529385019360019390930192908601906113c1565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a0152955061143c8187610e8f565b9a9950505050505050505050565b60006020828403121561145c57600080fd5b5051919050565b80820180821115610436577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CannotAcknowledgeUnsentMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorCase\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFeeTokenAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMagicBytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"ACKMESSAGEMAGICBYTES\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"disableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"enableChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"modifyFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"s_chains\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"simRevert\",\"type\":\"bool\"}],\"name\":\"setSimRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structICCIPClientBase.approvedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162004c1438038062004c148339810160408190526200003491620005fa565b82828181818181803380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c68162000172565b5050506001600160a01b038116620000f1576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0390811660805260078054610100600160a81b0319166101009285169283021790551590506200013a576200013a6001600160a01b038216836000196200021d565b5050505050508060026200014f919062000653565b6009601d6101000a81548160ff021916908360ff16021790555050505062000743565b336001600160a01b03821603620001cc5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8015806200029b5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000299919062000685565b155b6200030f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016200008a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003679185916200036c16565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490820152600090620003bb906001600160a01b0385169084906200043d565b805190915015620003675780806020019051810190620003dc91906200069f565b620003675760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200008a565b60606200044e848460008562000456565b949350505050565b606082471015620004b95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200008a565b600080866001600160a01b03168587604051620004d79190620006f0565b60006040518083038185875af1925050503d806000811462000516576040519150601f19603f3d011682016040523d82523d6000602084013e6200051b565b606091505b5090925090506200052f878383876200053a565b979650505050505050565b60608315620005ae578251600003620005a6576001600160a01b0385163b620005a65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200008a565b50816200044e565b6200044e8383815115620005c55781518083602001fd5b8060405162461bcd60e51b81526004016200008a91906200070e565b6001600160a01b0381168114620005f757600080fd5b50565b6000806000606084860312156200061057600080fd5b83516200061d81620005e1565b60208501519093506200063081620005e1565b604085015190925060ff811681146200064857600080fd5b809150509250925092565b60ff81811683821602908116908181146200067e57634e487b7160e01b600052601160045260246000fd5b5092915050565b6000602082840312156200069857600080fd5b5051919050565b600060208284031215620006b257600080fd5b81518015158114620006c357600080fd5b9392505050565b60005b83811015620006e7578181015183820152602001620006cd565b50506000910152565b6000825162000704818460208701620006ca565b9190910192915050565b60208152600082518060208401526200072f816040850160208701620006ca565b601f01601f19169190910160400192915050565b60805161447d62000797600039600081816105c20152818161080c015281816108aa01528181611141015281816114b401528181611f6f015281816121420152818161235801526128bc015261447d6000f3fe6080604052600436106101ff5760003560e01c80638462a2b91161010e578063bee518a4116100a7578063e6c725f511610079578063effde24011610061578063effde2401461072d578063f2fde38b14610740578063ff2deec31461076057005b8063e6c725f5146106c7578063ef686d8e1461070d57005b8063bee518a41461063e578063cf6730f814610667578063d8469e4014610687578063e4ca8754146106a757005b80639d2aede5116100e05780639d2aede514610593578063b0f479a1146105b3578063b187bd26146105e6578063b5a110111461061e57005b80638462a2b91461050857806385572ffb146105285780638da5cb5b146105485780638f491cba1461057357005b80633a51b79e11610198578063536c6bfa1161016a5780635e35359e116101525780635e35359e146104a65780636939cd97146104c657806379ba5097146104f357005b8063536c6bfa146104585780635dc5ebdb1461047857005b80633a51b79e146103a157806341eade46146103ea5780635075a9d41461040a57806352f813c31461043857005b8063181f5a77116101d1578063181f5a77146102be5780631892b906146103145780632874d8bf146103345780632b6e5d631461034957005b806305bfe982146102085780630e958d6b1461024e57806311e85dff1461027e57806316c38b3c1461029e57005b3661020657005b005b34801561021457600080fd5b506102386102233660046132c1565b60086020526000908152604090205460ff1681565b60405161024591906132da565b60405180910390f35b34801561025a57600080fd5b5061026e61026936600461337a565b610792565b6040519015158152602001610245565b34801561028a57600080fd5b50610206610299366004613401565b6107dc565b3480156102aa57600080fd5b506102066102b936600461342c565b61096c565b3480156102ca57600080fd5b506103076040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e322e30000000000000000081525081565b60405161024591906134b7565b34801561032057600080fd5b5061020661032f3660046134ca565b6109c6565b34801561034057600080fd5b50610206610a09565b34801561035557600080fd5b5060095468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610245565b3480156103ad57600080fd5b506103076040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b3480156103f657600080fd5b506102066104053660046134ca565b610a45565b34801561041657600080fd5b5061042a6104253660046132c1565b610a84565b604051908152602001610245565b34801561044457600080fd5b5061020661045336600461342c565b610a97565b34801561046457600080fd5b506102066104733660046134e7565b610ad0565b34801561048457600080fd5b506104986104933660046134ca565b610ae6565b604051610245929190613513565b3480156104b257600080fd5b506102066104c1366004613541565b610c12565b3480156104d257600080fd5b506104e66104e13660046132c1565b610c3b565b60405161024591906135df565b3480156104ff57600080fd5b50610206610e46565b34801561051457600080fd5b506102066105233660046136b8565b610f48565b34801561053457600080fd5b50610206610543366004613724565b611129565b34801561055457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661037c565b34801561057f57600080fd5b5061020661058e3660046132c1565b611419565b34801561059f57600080fd5b506102066105ae366004613401565b6115fd565b3480156105bf57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b3480156105f257600080fd5b506009547c0100000000000000000000000000000000000000000000000000000000900460ff1661026e565b34801561062a57600080fd5b5061020661063936600461375f565b6116b4565b34801561064a57600080fd5b5060095460405167ffffffffffffffff9091168152602001610245565b34801561067357600080fd5b50610206610682366004613724565b611824565b34801561069357600080fd5b506102066106a2366004613798565b6119f9565b3480156106b357600080fd5b506102066106c23660046132c1565b611a5b565b3480156106d357600080fd5b506009547d010000000000000000000000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610245565b34801561071957600080fd5b5061020661072836600461381b565b611cd9565b61042a61073b366004613973565b611d6a565b34801561074c57600080fd5b5061020661075b366004613401565b612462565b34801561076c57600080fd5b5060075461037c90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff8316600090815260026020819052604080832090519101906107c09085908590613a91565b9081526040519081900360200190205460ff1690509392505050565b6107e4612473565b600754610100900473ffffffffffffffffffffffffffffffffffffffff1615610851576108517f0000000000000000000000000000000000000000000000000000000000000000600754610100900473ffffffffffffffffffffffffffffffffffffffff169060006124f4565b6007805473ffffffffffffffffffffffffffffffffffffffff8381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff8516179094559290910416901561090e5761090e7f0000000000000000000000000000000000000000000000000000000000000000600754610100900473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6124f4565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e60405160405180910390a35050565b610974612473565b600980549115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6109ce612473565b600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b610a11612473565b600980547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff169055610a4360016126f4565b565b610a4d612473565b67ffffffffffffffff8116600090815260026020526040812090610a718282613273565b610a7f600183016000613273565b505050565b6000610a91600483612941565b92915050565b610a9f612473565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b610ad8612473565b610ae28282612954565b5050565b600260205260009081526040902080548190610b0190613aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2d90613aa1565b8015610b7a5780601f10610b4f57610100808354040283529160200191610b7a565b820191906000526020600020905b815481529060010190602001808311610b5d57829003601f168201915b505050505090806001018054610b8f90613aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90613aa1565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905082565b610c1a612473565b610a7f73ffffffffffffffffffffffffffffffffffffffff84168383612aae565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260038152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610caa90613aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd690613aa1565b8015610d235780601f10610cf857610100808354040283529160200191610d23565b820191906000526020600020905b815481529060010190602001808311610d0657829003601f168201915b50505050508152602001600382018054610d3c90613aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6890613aa1565b8015610db55780601f10610d8a57610100808354040283529160200191610db5565b820191906000526020600020905b815481529060010190602001808311610d9857829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610e385760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610de3565b505050915250909392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610f50612473565b60005b818110156110335760026000848484818110610f7157610f71613af4565b9050602002810190610f839190613b23565b610f919060208101906134ca565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610fc857610fc8613af4565b9050602002810190610fda9190613b23565b610fe8906020810190613b61565b604051610ff6929190613a91565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600101610f53565b5060005b838110156111225760016002600087878581811061105757611057613af4565b90506020028101906110699190613b23565b6110779060208101906134ca565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018686848181106110ae576110ae613af4565b90506020028101906110c09190613b23565b6110ce906020810190613b61565b6040516110dc929190613a91565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055600101611037565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461119a576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610ec3565b6111aa60408201602083016134ca565b6111b76040830183613b61565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff86168152600260208190526040918290209151910193506112149250849150613bc6565b9081526040519081900360200190205460ff1661125f57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610ec391906134b7565b61126f60408401602085016134ca565b67ffffffffffffffff81166000908152600260205260409020805461129390613aa1565b90506000036112da576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610ec3565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890611316908790600401613cda565b600060405180830381600087803b15801561133057600080fd5b505af1925050508015611341575060015b6113e6573d80801561136f576040519150601f19603f3d011682016040523d82523d6000602084013e611374565b606091505b50611386853560015b60049190612b04565b508435600090815260036020526040902085906113a382826140ac565b50506040518535907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f906113d89084906134b7565b60405180910390a250611413565b6040518435907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b50505050565b6009547d010000000000000000000000000000000000000000000000000000000000900460ff16158061147157506009547d010000000000000000000000000000000000000000000000000000000000900460ff1681105b156114795750565b6009546001906114ad907d010000000000000000000000000000000000000000000000000000000000900460ff16836141a6565b116115fa577f00000000000000000000000000000000000000000000000000000000000000006009546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa15801561154d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157191906141e1565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156115b857600080fd5b505af11580156115cc573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a15b50565b611605612473565b600980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560408051602081019290925201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815260095467ffffffffffffffff16600090815260026020522090610ae290826141fe565b6116bc612473565b6009805467ffffffffffffffff84167fffffffff0000000000000000000000000000000000000000000000000000000090911681176801000000000000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179092556000908152600260208181526040928390208351918201949094526001939091019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261177791613bc6565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff8416600090815260026020522090610a7f90826141fe565b33301461185d576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61186d60408201602083016134ca565b61187a6040830183613b61565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff86168152600260208190526040918290209151910193506118d79250849150613bc6565b9081526040519081900360200190205460ff1661192257806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610ec391906134b7565b61193260408401602085016134ca565b67ffffffffffffffff81166000908152600260205260409020805461195690613aa1565b905060000361199d576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610ec3565b60006119ac6060860186613b61565b8101906119b991906132c1565b6009549091507c0100000000000000000000000000000000000000000000000000000000900460ff16611122576111226119f4826001614318565b6126f4565b611a01612473565b67ffffffffffffffff85166000908152600260205260409020611a25848683613e30565b5080156111225767ffffffffffffffff85166000908152600260205260409020600101611a53828483613e30565b505050505050565b611a63612473565b6001611a70600483612941565b14611aaa576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610ec3565b611ab581600061137d565b506000818152600360209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191611afd90613aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2990613aa1565b8015611b765780601f10611b4b57610100808354040283529160200191611b76565b820191906000526020600020905b815481529060010190602001808311611b5957829003601f168201915b50505050508152602001600382018054611b8f90613aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbb90613aa1565b8015611c085780601f10611bdd57610100808354040283529160200191611c08565b820191906000526020600020905b815481529060010190602001808311611beb57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611c8b5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611c36565b50505050815250509050611c9e81612b19565b611ca9600483612bbf565b5060405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b611ce1612473565b600980547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf39060200160405180910390a150565b67ffffffffffffffff841660009081526002602052604081208054869190611d9190613aa1565b9050600003611dd8576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610ec3565b6040805160a08101825267ffffffffffffffff8816600090815260026020529182208054829190611e0890613aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3490613aa1565b8015611e815780601f10611e5657610100808354040283529160200191611e81565b820191906000526020600020905b815481529060010190602001808311611e6457829003601f168201915b505050505081526020018681526020018781526020018573ffffffffffffffffffffffffffffffffffffffff168152602001600260008a67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206001018054611ee890613aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1490613aa1565b8015611f615780601f10611f3657610100808354040283529160200191611f61565b820191906000526020600020905b815481529060010190602001808311611f4457829003601f168201915b5050505050815250905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166320487ded89846040518363ffffffff1660e01b8152600401611fc892919061432b565b602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200991906143f8565b90506000805b88518110156121ca5761207f33308b848151811061202f5761202f613af4565b6020026020010151602001518c858151811061204d5761204d613af4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612bcb909392919063ffffffff16565b8673ffffffffffffffffffffffffffffffffffffffff168982815181106120a8576120a8613af4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161480156120ec575073ffffffffffffffffffffffffffffffffffffffff871615155b8015612117575060075473ffffffffffffffffffffffffffffffffffffffff88811661010090920416145b1561213d57600191506121383330858c858151811061204d5761204d613af4565b6121c2565b6121c27f00000000000000000000000000000000000000000000000000000000000000008a838151811061217357612173613af4565b6020026020010151602001518b848151811061219157612191613af4565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166124f49092919063ffffffff16565b60010161200f565b50801580156121f8575060075473ffffffffffffffffffffffffffffffffffffffff87811661010090920416145b8015612219575073ffffffffffffffffffffffffffffffffffffffff861615155b156122e7576040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829073ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa15801561228a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae91906143f8565b1080156122bb5750333014155b156122e2576122e273ffffffffffffffffffffffffffffffffffffffff8716333085612bcb565b612341565b73ffffffffffffffffffffffffffffffffffffffff861615801561230a57508134105b15612341576040517f07da6ee600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116906396f4e9f99088161561238e576000612390565b835b8b866040518463ffffffff1660e01b81526004016123af92919061432b565b60206040518083038185885af11580156123cd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123f291906143f8565b60008181526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a350505050949350505050565b61246a612473565b6115fa81612c29565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610ec3565b80158061259457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561256e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259291906143f8565b155b612620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610ec3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a7f9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612d1e565b80600116600103612737576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a161276b565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b61277481611419565b6040805160a0810190915260095468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e081016040516020818303038152906040528152602001836040516020016127d891815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528152602001600060405190808252806020026020018201604052801561285257816020015b604080518082019091526000808252602082015281526020019060019003908161282b5790505b50815260075473ffffffffffffffffffffffffffffffffffffffff6101009091048116602080840191909152604080519182018152600082529283015260095491517f96f4e9f90000000000000000000000000000000000000000000000000000000081529293507f000000000000000000000000000000000000000000000000000000000000000016916396f4e9f9916128fe9167ffffffffffffffff90911690859060040161432b565b6020604051808303816000875af115801561291d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7f91906143f8565b600061294d8383612e2a565b9392505050565b804710156129be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ec3565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612a18576040519150601f19603f3d011682016040523d82523d6000602084013e612a1d565b606091505b5050905080610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ec3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a7f9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612672565b6000612b11848484612eb4565b949350505050565b60005b816080015151811015610ae257600082608001518281518110612b4157612b41613af4565b6020026020010151602001519050600083608001518381518110612b6757612b67613af4565b6020026020010151600001519050612bb5612b9760005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff83169084612aae565b5050600101612b1c565b600061294d8383612ed1565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526114139085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612672565b3373ffffffffffffffffffffffffffffffffffffffff821603612ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610ec3565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612d80826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612eee9092919063ffffffff16565b805190915015610a7f5780806020019051810190612d9e9190614411565b610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ec3565b600081815260028301602052604081205480151580612e4e5750612e4e8484612efd565b61294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610ec3565b60008281526002840160205260408120829055612b118484612f09565b6000818152600283016020526040812081905561294d8383612f15565b6060612b118484600085612f21565b600061294d838361303a565b600061294d8383613052565b600061294d83836130a1565b606082471015612fb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ec3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612fdc9190613bc6565b60006040518083038185875af1925050503d8060008114613019576040519150601f19603f3d011682016040523d82523d6000602084013e61301e565b606091505b509150915061302f87838387613194565b979650505050505050565b6000818152600183016020526040812054151561294d565b600081815260018301602052604081205461309957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a91565b506000610a91565b6000818152600183016020526040812054801561318a5760006130c560018361442e565b85549091506000906130d99060019061442e565b905081811461313e5760008660000182815481106130f9576130f9613af4565b906000526020600020015490508087600001848154811061311c5761311c613af4565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061314f5761314f614441565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a91565b6000915050610a91565b6060831561322a5782516000036132235773ffffffffffffffffffffffffffffffffffffffff85163b613223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec3565b5081612b11565b612b11838381511561323f5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec391906134b7565b50805461327f90613aa1565b6000825580601f1061328f575050565b601f0160209004906000526020600020908101906115fa91905b808211156132bd57600081556001016132a9565b5090565b6000602082840312156132d357600080fd5b5035919050565b6020810160038310613315577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff811681146115fa57600080fd5b60008083601f84011261334357600080fd5b50813567ffffffffffffffff81111561335b57600080fd5b60208301915083602082850101111561337357600080fd5b9250929050565b60008060006040848603121561338f57600080fd5b833561339a8161331b565b9250602084013567ffffffffffffffff8111156133b657600080fd5b6133c286828701613331565b9497909650939450505050565b73ffffffffffffffffffffffffffffffffffffffff811681146115fa57600080fd5b80356133fc816133cf565b919050565b60006020828403121561341357600080fd5b813561294d816133cf565b80151581146115fa57600080fd5b60006020828403121561343e57600080fd5b813561294d8161341e565b60005b8381101561346457818101518382015260200161344c565b50506000910152565b60008151808452613485816020860160208601613449565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061294d602083018461346d565b6000602082840312156134dc57600080fd5b813561294d8161331b565b600080604083850312156134fa57600080fd5b8235613505816133cf565b946020939093013593505050565b604081526000613526604083018561346d565b8281036020840152613538818561346d565b95945050505050565b60008060006060848603121561355657600080fd5b8335613561816133cf565b92506020840135613571816133cf565b929592945050506040919091013590565b60008151808452602080850194506020840160005b838110156135d4578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101613597565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a0606084015261361960c084018261346d565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858403016080860152613655838361346d565b925060808601519150808584030160a0860152506135388282613582565b60008083601f84011261368557600080fd5b50813567ffffffffffffffff81111561369d57600080fd5b6020830191508360208260051b850101111561337357600080fd5b600080600080604085870312156136ce57600080fd5b843567ffffffffffffffff808211156136e657600080fd5b6136f288838901613673565b9096509450602087013591508082111561370b57600080fd5b5061371887828801613673565b95989497509550505050565b60006020828403121561373657600080fd5b813567ffffffffffffffff81111561374d57600080fd5b820160a0818503121561294d57600080fd5b6000806040838503121561377257600080fd5b823561377d8161331b565b9150602083013561378d816133cf565b809150509250929050565b6000806000806000606086880312156137b057600080fd5b85356137bb8161331b565b9450602086013567ffffffffffffffff808211156137d857600080fd5b6137e489838a01613331565b909650945060408801359150808211156137fd57600080fd5b5061380a88828901613331565b969995985093965092949392505050565b60006020828403121561382d57600080fd5b813560ff8116811461294d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156138905761389061383e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156138dd576138dd61383e565b604052919050565b600082601f8301126138f657600080fd5b813567ffffffffffffffff8111156139105761391061383e565b61394160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613896565b81815284602083860101111561395657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561398957600080fd5b84356139948161331b565b935060208581013567ffffffffffffffff808211156139b257600080fd5b818801915088601f8301126139c657600080fd5b8135818111156139d8576139d861383e565b6139e6848260051b01613896565b81815260069190911b8301840190848101908b831115613a0557600080fd5b938501935b82851015613a51576040858d031215613a235760008081fd5b613a2b61386d565b8535613a36816133cf565b81528587013587820152825260409094019390850190613a0a565b975050506040880135925080831115613a6957600080fd5b5050613a77878288016138e5565b925050613a86606086016133f1565b905092959194509250565b8183823760009101908152919050565b600181811c90821680613ab557607f821691505b602082108103613aee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613b5757600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613b9657600080fd5b83018035915067ffffffffffffffff821115613bb157600080fd5b60200191503681900382131561337357600080fd5b60008251613b57818460208701613449565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613c0d57600080fd5b830160208101925035905067ffffffffffffffff811115613c2d57600080fd5b80360382131561337357600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156135d4578135613ca8816133cf565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613c95565b602081528135602082015260006020830135613cf58161331b565b67ffffffffffffffff8082166040850152613d136040860186613bd8565b925060a06060860152613d2a60c086018483613c3c565b925050613d3a6060860186613bd8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152613d70858385613c3c565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312613da957600080fd5b60209288019283019235915083821115613dc257600080fd5b8160061b3603831315613dd457600080fd5b8685030160a087015261302f848284613c85565b601f821115610a7f576000816000526020600020601f850160051c81016020861015613e115750805b601f850160051c820191505b81811015611a5357828155600101613e1d565b67ffffffffffffffff831115613e4857613e4861383e565b613e5c83613e568354613aa1565b83613de8565b6000601f841160018114613eae5760008515613e785750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611122565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613efd5786850135825560209485019460019092019101613edd565b5086821015613f38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8135613f84816133cf565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b68010000000000000000831115613fea57613fea61383e565b8054838255808410156140775760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461402b5761402b613f4a565b808616861461403c5761403c613f4a565b5060008360005260206000208360011b81018760011b820191505b80821015614072578282558284830155600282019150614057565b505050505b5060008181526020812083915b85811015611a53576140968383613f79565b6040929092019160029190910190600101614084565b813581556001810160208301356140c28161331b565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556141026040860186613b61565b93509150614114838360028701613e30565b6141216060860186613b61565b93509150614133838360038701613e30565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261416a57600080fd5b91840191823591508082111561417f57600080fd5b506020820191508060061b360382131561419857600080fd5b611413818360048601613fd1565b6000826141dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b6000602082840312156141f357600080fd5b815161294d816133cf565b815167ffffffffffffffff8111156142185761421861383e565b61422c816142268454613aa1565b84613de8565b602080601f83116001811461427f57600084156142495750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611a53565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156142cc578886015182559484019460019091019084016142ad565b508582101561430857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610a9157610a91613f4a565b67ffffffffffffffff83168152604060208201526000825160a0604084015261435760e084018261346d565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080858403016060860152614393838361346d565b925060408601519150808584030160808601526143b08383613582565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506143ee828261346d565b9695505050505050565b60006020828403121561440a57600080fd5b5051919050565b60006020828403121561442357600080fd5b815161294d8161341e565b81810381811115610a9157610a91613f4a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var SelfFundedPingPongABI = SelfFundedPingPongMetaData.ABI @@ -184,6 +189,28 @@ func (_SelfFundedPingPong *SelfFundedPingPongTransactorRaw) Transact(opts *bind. return _SelfFundedPingPong.Contract.contract.Transact(opts, method, params...) } +func (_SelfFundedPingPong *SelfFundedPingPongCaller) ACKMESSAGEMAGICBYTES(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _SelfFundedPingPong.contract.Call(opts, &out, "ACKMESSAGEMAGICBYTES") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) ACKMESSAGEMAGICBYTES() ([]byte, error) { + return _SelfFundedPingPong.Contract.ACKMESSAGEMAGICBYTES(&_SelfFundedPingPong.CallOpts) +} + +func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) ACKMESSAGEMAGICBYTES() ([]byte, error) { + return _SelfFundedPingPong.Contract.ACKMESSAGEMAGICBYTES(&_SelfFundedPingPong.CallOpts) +} + func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetCountIncrBeforeFunding(opts *bind.CallOpts) (uint8, error) { var out []interface{} err := _SelfFundedPingPong.contract.Call(opts, &out, "getCountIncrBeforeFunding") @@ -250,26 +277,48 @@ func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) GetCounterpartChainS return _SelfFundedPingPong.Contract.GetCounterpartChainSelector(&_SelfFundedPingPong.CallOpts) } -func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetFeeToken(opts *bind.CallOpts) (common.Address, error) { +func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) { var out []interface{} - err := _SelfFundedPingPong.contract.Call(opts, &out, "getFeeToken") + err := _SelfFundedPingPong.contract.Call(opts, &out, "getMessageContents", messageId) if err != nil { - return *new(common.Address), err + return *new(ClientAny2EVMMessage), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(ClientAny2EVMMessage)).(*ClientAny2EVMMessage) + + return out0, err + +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _SelfFundedPingPong.Contract.GetMessageContents(&_SelfFundedPingPong.CallOpts, messageId) +} + +func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _SelfFundedPingPong.Contract.GetMessageContents(&_SelfFundedPingPong.CallOpts, messageId) +} + +func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) { + var out []interface{} + err := _SelfFundedPingPong.contract.Call(opts, &out, "getMessageStatus", messageId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -func (_SelfFundedPingPong *SelfFundedPingPongSession) GetFeeToken() (common.Address, error) { - return _SelfFundedPingPong.Contract.GetFeeToken(&_SelfFundedPingPong.CallOpts) +func (_SelfFundedPingPong *SelfFundedPingPongSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _SelfFundedPingPong.Contract.GetMessageStatus(&_SelfFundedPingPong.CallOpts, messageId) } -func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) GetFeeToken() (common.Address, error) { - return _SelfFundedPingPong.Contract.GetFeeToken(&_SelfFundedPingPong.CallOpts) +func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { + return _SelfFundedPingPong.Contract.GetMessageStatus(&_SelfFundedPingPong.CallOpts, messageId) } func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { @@ -294,6 +343,28 @@ func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) GetRouter() (common. return _SelfFundedPingPong.Contract.GetRouter(&_SelfFundedPingPong.CallOpts) } +func (_SelfFundedPingPong *SelfFundedPingPongCaller) IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) { + var out []interface{} + err := _SelfFundedPingPong.contract.Call(opts, &out, "isApprovedSender", sourceChainSelector, senderAddr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _SelfFundedPingPong.Contract.IsApprovedSender(&_SelfFundedPingPong.CallOpts, sourceChainSelector, senderAddr) +} + +func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) IsApprovedSender(sourceChainSelector uint64, senderAddr []byte) (bool, error) { + return _SelfFundedPingPong.Contract.IsApprovedSender(&_SelfFundedPingPong.CallOpts, sourceChainSelector, senderAddr) +} + func (_SelfFundedPingPong *SelfFundedPingPongCaller) IsPaused(opts *bind.CallOpts) (bool, error) { var out []interface{} err := _SelfFundedPingPong.contract.Call(opts, &out, "isPaused") @@ -338,26 +409,78 @@ func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) Owner() (common.Addr return _SelfFundedPingPong.Contract.Owner(&_SelfFundedPingPong.CallOpts) } -func (_SelfFundedPingPong *SelfFundedPingPongCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { +func (_SelfFundedPingPong *SelfFundedPingPongCaller) SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) { var out []interface{} - err := _SelfFundedPingPong.contract.Call(opts, &out, "supportsInterface", interfaceId) + err := _SelfFundedPingPong.contract.Call(opts, &out, "s_chains", arg0) + outstruct := new(SChains) if err != nil { - return *new(bool), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.Recipient = *abi.ConvertType(out[0], new([]byte)).(*[]byte) + outstruct.ExtraArgsBytes = *abi.ConvertType(out[1], new([]byte)).(*[]byte) + + return *outstruct, err + +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) SChains(arg0 uint64) (SChains, + + error) { + return _SelfFundedPingPong.Contract.SChains(&_SelfFundedPingPong.CallOpts, arg0) +} + +func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) SChains(arg0 uint64) (SChains, + + error) { + return _SelfFundedPingPong.Contract.SChains(&_SelfFundedPingPong.CallOpts, arg0) +} + +func (_SelfFundedPingPong *SelfFundedPingPongCaller) SFeeToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SelfFundedPingPong.contract.Call(opts, &out, "s_feeToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) SFeeToken() (common.Address, error) { + return _SelfFundedPingPong.Contract.SFeeToken(&_SelfFundedPingPong.CallOpts) +} + +func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) SFeeToken() (common.Address, error) { + return _SelfFundedPingPong.Contract.SFeeToken(&_SelfFundedPingPong.CallOpts) +} + +func (_SelfFundedPingPong *SelfFundedPingPongCaller) SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) { + var out []interface{} + err := _SelfFundedPingPong.contract.Call(opts, &out, "s_messageStatus", messageId) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) return out0, err } -func (_SelfFundedPingPong *SelfFundedPingPongSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _SelfFundedPingPong.Contract.SupportsInterface(&_SelfFundedPingPong.CallOpts, interfaceId) +func (_SelfFundedPingPong *SelfFundedPingPongSession) SMessageStatus(messageId [32]byte) (uint8, error) { + return _SelfFundedPingPong.Contract.SMessageStatus(&_SelfFundedPingPong.CallOpts, messageId) } -func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _SelfFundedPingPong.Contract.SupportsInterface(&_SelfFundedPingPong.CallOpts, interfaceId) +func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) SMessageStatus(messageId [32]byte) (uint8, error) { + return _SelfFundedPingPong.Contract.SMessageStatus(&_SelfFundedPingPong.CallOpts, messageId) } func (_SelfFundedPingPong *SelfFundedPingPongCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { @@ -406,104 +529,1106 @@ func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) CcipReceive(mess return _SelfFundedPingPong.Contract.CcipReceive(&_SelfFundedPingPong.TransactOpts, message) } -func (_SelfFundedPingPong *SelfFundedPingPongTransactor) FundPingPong(opts *bind.TransactOpts, pingPongCount *big.Int) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "fundPingPong", pingPongCount) -} +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) CcipSend(opts *bind.TransactOpts, destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "ccipSend", destChainSelector, tokenAmounts, data, feeToken) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) CcipSend(destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.CcipSend(&_SelfFundedPingPong.TransactOpts, destChainSelector, tokenAmounts, data, feeToken) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) CcipSend(destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.CcipSend(&_SelfFundedPingPong.TransactOpts, destChainSelector, tokenAmounts, data, feeToken) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "disableChain", chainSelector) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.DisableChain(&_SelfFundedPingPong.TransactOpts, chainSelector) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) DisableChain(chainSelector uint64) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.DisableChain(&_SelfFundedPingPong.TransactOpts, chainSelector) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "enableChain", chainSelector, recipient, _extraArgsBytes) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.EnableChain(&_SelfFundedPingPong.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) EnableChain(chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.EnableChain(&_SelfFundedPingPong.TransactOpts, chainSelector, recipient, _extraArgsBytes) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) FundPingPong(opts *bind.TransactOpts, pingPongCount *big.Int) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "fundPingPong", pingPongCount) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) FundPingPong(pingPongCount *big.Int) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.FundPingPong(&_SelfFundedPingPong.TransactOpts, pingPongCount) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) FundPingPong(pingPongCount *big.Int) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.FundPingPong(&_SelfFundedPingPong.TransactOpts, pingPongCount) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) ModifyFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "modifyFeeToken", token) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) ModifyFeeToken(token common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.ModifyFeeToken(&_SelfFundedPingPong.TransactOpts, token) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) ModifyFeeToken(token common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.ModifyFeeToken(&_SelfFundedPingPong.TransactOpts, token) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "processMessage", message) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.ProcessMessage(&_SelfFundedPingPong.TransactOpts, message) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) ProcessMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.ProcessMessage(&_SelfFundedPingPong.TransactOpts, message) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "retryFailedMessage", messageId) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.RetryFailedMessage(&_SelfFundedPingPong.TransactOpts, messageId) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) RetryFailedMessage(messageId [32]byte) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.RetryFailedMessage(&_SelfFundedPingPong.TransactOpts, messageId) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCountIncrBeforeFunding(opts *bind.TransactOpts, countIncrBeforeFunding uint8) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "setCountIncrBeforeFunding", countIncrBeforeFunding) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCountIncrBeforeFunding(countIncrBeforeFunding uint8) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetCountIncrBeforeFunding(&_SelfFundedPingPong.TransactOpts, countIncrBeforeFunding) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCountIncrBeforeFunding(countIncrBeforeFunding uint8) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetCountIncrBeforeFunding(&_SelfFundedPingPong.TransactOpts, countIncrBeforeFunding) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCounterpart(opts *bind.TransactOpts, counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "setCounterpart", counterpartChainSelector, counterpartAddress) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCounterpart(counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetCounterpart(&_SelfFundedPingPong.TransactOpts, counterpartChainSelector, counterpartAddress) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpart(counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetCounterpart(&_SelfFundedPingPong.TransactOpts, counterpartChainSelector, counterpartAddress) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCounterpartAddress(opts *bind.TransactOpts, counterpartAddress common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "setCounterpartAddress", counterpartAddress) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCounterpartAddress(counterpartAddress common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetCounterpartAddress(&_SelfFundedPingPong.TransactOpts, counterpartAddress) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpartAddress(counterpartAddress common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetCounterpartAddress(&_SelfFundedPingPong.TransactOpts, counterpartAddress) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCounterpartChainSelector(opts *bind.TransactOpts, counterpartChainSelector uint64) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "setCounterpartChainSelector", counterpartChainSelector) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCounterpartChainSelector(counterpartChainSelector uint64) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetCounterpartChainSelector(&_SelfFundedPingPong.TransactOpts, counterpartChainSelector) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpartChainSelector(counterpartChainSelector uint64) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetCounterpartChainSelector(&_SelfFundedPingPong.TransactOpts, counterpartChainSelector) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "setPaused", pause) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) SetPaused(pause bool) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetPaused(&_SelfFundedPingPong.TransactOpts, pause) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetPaused(pause bool) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetPaused(&_SelfFundedPingPong.TransactOpts, pause) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "setSimRevert", simRevert) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetSimRevert(&_SelfFundedPingPong.TransactOpts, simRevert) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetSimRevert(simRevert bool) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.SetSimRevert(&_SelfFundedPingPong.TransactOpts, simRevert) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) StartPingPong(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "startPingPong") +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) StartPingPong() (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.StartPingPong(&_SelfFundedPingPong.TransactOpts) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) StartPingPong() (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.StartPingPong(&_SelfFundedPingPong.TransactOpts) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "transferOwnership", to) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.TransferOwnership(&_SelfFundedPingPong.TransactOpts, to) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.TransferOwnership(&_SelfFundedPingPong.TransactOpts, to) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "updateApprovedSenders", adds, removes) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.UpdateApprovedSenders(&_SelfFundedPingPong.TransactOpts, adds, removes) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) UpdateApprovedSenders(adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.UpdateApprovedSenders(&_SelfFundedPingPong.TransactOpts, adds, removes) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "withdrawNativeToken", to, amount) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.WithdrawNativeToken(&_SelfFundedPingPong.TransactOpts, to, amount) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.WithdrawNativeToken(&_SelfFundedPingPong.TransactOpts, to, amount) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.Transact(opts, "withdrawTokens", token, to, amount) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.WithdrawTokens(&_SelfFundedPingPong.TransactOpts, token, to, amount) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.WithdrawTokens(&_SelfFundedPingPong.TransactOpts, token, to, amount) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.RawTransact(opts, calldata) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.Fallback(&_SelfFundedPingPong.TransactOpts, calldata) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.Fallback(&_SelfFundedPingPong.TransactOpts, calldata) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SelfFundedPingPong.contract.RawTransact(opts, nil) +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) Receive() (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.Receive(&_SelfFundedPingPong.TransactOpts) +} + +func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) Receive() (*types.Transaction, error) { + return _SelfFundedPingPong.Contract.Receive(&_SelfFundedPingPong.TransactOpts) +} + +type SelfFundedPingPongCountIncrBeforeFundingSetIterator struct { + Event *SelfFundedPingPongCountIncrBeforeFundingSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongCountIncrBeforeFundingSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongCountIncrBeforeFundingSet) + 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(SelfFundedPingPongCountIncrBeforeFundingSet) + 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 *SelfFundedPingPongCountIncrBeforeFundingSetIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongCountIncrBeforeFundingSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongCountIncrBeforeFundingSet struct { + CountIncrBeforeFunding uint8 + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterCountIncrBeforeFundingSet(opts *bind.FilterOpts) (*SelfFundedPingPongCountIncrBeforeFundingSetIterator, error) { + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "CountIncrBeforeFundingSet") + if err != nil { + return nil, err + } + return &SelfFundedPingPongCountIncrBeforeFundingSetIterator{contract: _SelfFundedPingPong.contract, event: "CountIncrBeforeFundingSet", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchCountIncrBeforeFundingSet(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongCountIncrBeforeFundingSet) (event.Subscription, error) { + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "CountIncrBeforeFundingSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongCountIncrBeforeFundingSet) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "CountIncrBeforeFundingSet", 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 (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseCountIncrBeforeFundingSet(log types.Log) (*SelfFundedPingPongCountIncrBeforeFundingSet, error) { + event := new(SelfFundedPingPongCountIncrBeforeFundingSet) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "CountIncrBeforeFundingSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SelfFundedPingPongFeeTokenModifiedIterator struct { + Event *SelfFundedPingPongFeeTokenModified + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongFeeTokenModifiedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongFeeTokenModified) + 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(SelfFundedPingPongFeeTokenModified) + 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 *SelfFundedPingPongFeeTokenModifiedIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongFeeTokenModifiedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongFeeTokenModified struct { + OldToken common.Address + NewToken common.Address + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterFeeTokenModified(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*SelfFundedPingPongFeeTokenModifiedIterator, error) { + + var oldTokenRule []interface{} + for _, oldTokenItem := range oldToken { + oldTokenRule = append(oldTokenRule, oldTokenItem) + } + var newTokenRule []interface{} + for _, newTokenItem := range newToken { + newTokenRule = append(newTokenRule, newTokenItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "FeeTokenModified", oldTokenRule, newTokenRule) + if err != nil { + return nil, err + } + return &SelfFundedPingPongFeeTokenModifiedIterator{contract: _SelfFundedPingPong.contract, event: "FeeTokenModified", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchFeeTokenModified(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongFeeTokenModified, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) { + + var oldTokenRule []interface{} + for _, oldTokenItem := range oldToken { + oldTokenRule = append(oldTokenRule, oldTokenItem) + } + var newTokenRule []interface{} + for _, newTokenItem := range newToken { + newTokenRule = append(newTokenRule, newTokenItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "FeeTokenModified", oldTokenRule, newTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongFeeTokenModified) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "FeeTokenModified", 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 (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseFeeTokenModified(log types.Log) (*SelfFundedPingPongFeeTokenModified, error) { + event := new(SelfFundedPingPongFeeTokenModified) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "FeeTokenModified", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SelfFundedPingPongFundedIterator struct { + Event *SelfFundedPingPongFunded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongFundedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongFunded) + 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(SelfFundedPingPongFunded) + 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 *SelfFundedPingPongFundedIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongFundedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongFunded struct { + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterFunded(opts *bind.FilterOpts) (*SelfFundedPingPongFundedIterator, error) { + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "Funded") + if err != nil { + return nil, err + } + return &SelfFundedPingPongFundedIterator{contract: _SelfFundedPingPong.contract, event: "Funded", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchFunded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongFunded) (event.Subscription, error) { + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "Funded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongFunded) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "Funded", 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 (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseFunded(log types.Log) (*SelfFundedPingPongFunded, error) { + event := new(SelfFundedPingPongFunded) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "Funded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SelfFundedPingPongMessageAckReceivedIterator struct { + Event *SelfFundedPingPongMessageAckReceived + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongMessageAckReceivedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongMessageAckReceived) + 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(SelfFundedPingPongMessageAckReceived) + 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 *SelfFundedPingPongMessageAckReceivedIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongMessageAckReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongMessageAckReceived struct { + Arg0 [32]byte + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageAckReceived(opts *bind.FilterOpts) (*SelfFundedPingPongMessageAckReceivedIterator, error) { + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageAckReceived") + if err != nil { + return nil, err + } + return &SelfFundedPingPongMessageAckReceivedIterator{contract: _SelfFundedPingPong.contract, event: "MessageAckReceived", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAckReceived) (event.Subscription, error) { + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageAckReceived") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongMessageAckReceived) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAckReceived", 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 (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageAckReceived(log types.Log) (*SelfFundedPingPongMessageAckReceived, error) { + event := new(SelfFundedPingPongMessageAckReceived) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAckReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SelfFundedPingPongMessageAckSentIterator struct { + Event *SelfFundedPingPongMessageAckSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongMessageAckSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongMessageAckSent) + 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(SelfFundedPingPongMessageAckSent) + 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 *SelfFundedPingPongMessageAckSentIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongMessageAckSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongMessageAckSent struct { + IncomingMessageId [32]byte + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageAckSent(opts *bind.FilterOpts) (*SelfFundedPingPongMessageAckSentIterator, error) { + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageAckSent") + if err != nil { + return nil, err + } + return &SelfFundedPingPongMessageAckSentIterator{contract: _SelfFundedPingPong.contract, event: "MessageAckSent", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAckSent) (event.Subscription, error) { + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageAckSent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongMessageAckSent) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAckSent", 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 (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageAckSent(log types.Log) (*SelfFundedPingPongMessageAckSent, error) { + event := new(SelfFundedPingPongMessageAckSent) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAckSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SelfFundedPingPongMessageFailedIterator struct { + Event *SelfFundedPingPongMessageFailed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongMessageFailedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongMessageFailed) + 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(SelfFundedPingPongMessageFailed) + 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 *SelfFundedPingPongMessageFailedIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongMessageFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongMessageFailed struct { + MessageId [32]byte + Reason []byte + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageFailedIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return &SelfFundedPingPongMessageFailedIterator{contract: _SelfFundedPingPong.contract, event: "MessageFailed", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageFailed, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: -func (_SelfFundedPingPong *SelfFundedPingPongSession) FundPingPong(pingPongCount *big.Int) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.FundPingPong(&_SelfFundedPingPong.TransactOpts, pingPongCount) -} + event := new(SelfFundedPingPongMessageFailed) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageFailed", log); err != nil { + return err + } + event.Raw = log -func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) FundPingPong(pingPongCount *big.Int) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.FundPingPong(&_SelfFundedPingPong.TransactOpts, pingPongCount) + 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 (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCountIncrBeforeFunding(opts *bind.TransactOpts, countIncrBeforeFunding uint8) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "setCountIncrBeforeFunding", countIncrBeforeFunding) +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageFailed(log types.Log) (*SelfFundedPingPongMessageFailed, error) { + event := new(SelfFundedPingPongMessageFailed) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCountIncrBeforeFunding(countIncrBeforeFunding uint8) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCountIncrBeforeFunding(&_SelfFundedPingPong.TransactOpts, countIncrBeforeFunding) -} +type SelfFundedPingPongMessageRecoveredIterator struct { + Event *SelfFundedPingPongMessageRecovered -func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCountIncrBeforeFunding(countIncrBeforeFunding uint8) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCountIncrBeforeFunding(&_SelfFundedPingPong.TransactOpts, countIncrBeforeFunding) -} + contract *bind.BoundContract + event string -func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCounterpart(opts *bind.TransactOpts, counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "setCounterpart", counterpartChainSelector, counterpartAddress) + logs chan types.Log + sub ethereum.Subscription + done bool + fail error } -func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCounterpart(counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpart(&_SelfFundedPingPong.TransactOpts, counterpartChainSelector, counterpartAddress) -} +func (it *SelfFundedPingPongMessageRecoveredIterator) Next() bool { -func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpart(counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpart(&_SelfFundedPingPong.TransactOpts, counterpartChainSelector, counterpartAddress) -} + if it.fail != nil { + return false + } -func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "setCounterpartAddress", addr) -} + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongMessageRecovered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpartAddress(&_SelfFundedPingPong.TransactOpts, addr) -} + default: + return false + } + } -func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpartAddress(&_SelfFundedPingPong.TransactOpts, addr) -} + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongMessageRecovered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "setCounterpartChainSelector", chainSelector) + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } } -func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpartChainSelector(&_SelfFundedPingPong.TransactOpts, chainSelector) +func (it *SelfFundedPingPongMessageRecoveredIterator) Error() error { + return it.fail } -func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpartChainSelector(&_SelfFundedPingPong.TransactOpts, chainSelector) +func (it *SelfFundedPingPongMessageRecoveredIterator) Close() error { + it.sub.Unsubscribe() + return nil } -func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "setPaused", pause) +type SelfFundedPingPongMessageRecovered struct { + MessageId [32]byte + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongSession) SetPaused(pause bool) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetPaused(&_SelfFundedPingPong.TransactOpts, pause) -} +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageRecoveredIterator, error) { -func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetPaused(pause bool) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetPaused(&_SelfFundedPingPong.TransactOpts, pause) -} + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } -func (_SelfFundedPingPong *SelfFundedPingPongTransactor) StartPingPong(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "startPingPong") + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return &SelfFundedPingPongMessageRecoveredIterator{contract: _SelfFundedPingPong.contract, event: "MessageRecovered", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongSession) StartPingPong() (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.StartPingPong(&_SelfFundedPingPong.TransactOpts) -} +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageRecovered, messageId [][32]byte) (event.Subscription, error) { -func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) StartPingPong() (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.StartPingPong(&_SelfFundedPingPong.TransactOpts) -} + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } -func (_SelfFundedPingPong *SelfFundedPingPongTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "transferOwnership", to) -} + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: -func (_SelfFundedPingPong *SelfFundedPingPongSession) TransferOwnership(to common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.TransferOwnership(&_SelfFundedPingPong.TransactOpts, to) + event := new(SelfFundedPingPongMessageRecovered) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageRecovered", 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 (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.TransferOwnership(&_SelfFundedPingPong.TransactOpts, to) +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageRecovered(log types.Log) (*SelfFundedPingPongMessageRecovered, error) { + event := new(SelfFundedPingPongMessageRecovered) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageRecovered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -type SelfFundedPingPongCountIncrBeforeFundingSetIterator struct { - Event *SelfFundedPingPongCountIncrBeforeFundingSet +type SelfFundedPingPongMessageSentIterator struct { + Event *SelfFundedPingPongMessageSent contract *bind.BoundContract event string @@ -514,7 +1639,7 @@ type SelfFundedPingPongCountIncrBeforeFundingSetIterator struct { fail error } -func (it *SelfFundedPingPongCountIncrBeforeFundingSetIterator) Next() bool { +func (it *SelfFundedPingPongMessageSentIterator) Next() bool { if it.fail != nil { return false @@ -523,7 +1648,7 @@ func (it *SelfFundedPingPongCountIncrBeforeFundingSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongCountIncrBeforeFundingSet) + it.Event = new(SelfFundedPingPongMessageSent) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -538,7 +1663,7 @@ func (it *SelfFundedPingPongCountIncrBeforeFundingSetIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongCountIncrBeforeFundingSet) + it.Event = new(SelfFundedPingPongMessageSent) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -553,32 +1678,51 @@ func (it *SelfFundedPingPongCountIncrBeforeFundingSetIterator) Next() bool { } } -func (it *SelfFundedPingPongCountIncrBeforeFundingSetIterator) Error() error { +func (it *SelfFundedPingPongMessageSentIterator) Error() error { return it.fail } -func (it *SelfFundedPingPongCountIncrBeforeFundingSetIterator) Close() error { +func (it *SelfFundedPingPongMessageSentIterator) Close() error { it.sub.Unsubscribe() return nil } -type SelfFundedPingPongCountIncrBeforeFundingSet struct { - CountIncrBeforeFunding uint8 - Raw types.Log +type SelfFundedPingPongMessageSent struct { + IncomingMessageId [32]byte + ACKMessageId [32]byte + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterCountIncrBeforeFundingSet(opts *bind.FilterOpts) (*SelfFundedPingPongCountIncrBeforeFundingSetIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*SelfFundedPingPongMessageSentIterator, error) { - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "CountIncrBeforeFundingSet") + var incomingMessageIdRule []interface{} + for _, incomingMessageIdItem := range incomingMessageId { + incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) + } + var ACKMessageIdRule []interface{} + for _, ACKMessageIdItem := range ACKMessageId { + ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) if err != nil { return nil, err } - return &SelfFundedPingPongCountIncrBeforeFundingSetIterator{contract: _SelfFundedPingPong.contract, event: "CountIncrBeforeFundingSet", logs: logs, sub: sub}, nil + return &SelfFundedPingPongMessageSentIterator{contract: _SelfFundedPingPong.contract, event: "MessageSent", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchCountIncrBeforeFundingSet(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongCountIncrBeforeFundingSet) (event.Subscription, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) { - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "CountIncrBeforeFundingSet") + var incomingMessageIdRule []interface{} + for _, incomingMessageIdItem := range incomingMessageId { + incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) + } + var ACKMessageIdRule []interface{} + for _, ACKMessageIdItem := range ACKMessageId { + ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) if err != nil { return nil, err } @@ -588,8 +1732,8 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchCountIncrBeforeFundi select { case log := <-logs: - event := new(SelfFundedPingPongCountIncrBeforeFundingSet) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "CountIncrBeforeFundingSet", log); err != nil { + event := new(SelfFundedPingPongMessageSent) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageSent", log); err != nil { return err } event.Raw = log @@ -610,17 +1754,17 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchCountIncrBeforeFundi }), nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseCountIncrBeforeFundingSet(log types.Log) (*SelfFundedPingPongCountIncrBeforeFundingSet, error) { - event := new(SelfFundedPingPongCountIncrBeforeFundingSet) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "CountIncrBeforeFundingSet", log); err != nil { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageSent(log types.Log) (*SelfFundedPingPongMessageSent, error) { + event := new(SelfFundedPingPongMessageSent) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageSent", log); err != nil { return nil, err } event.Raw = log return event, nil } -type SelfFundedPingPongFundedIterator struct { - Event *SelfFundedPingPongFunded +type SelfFundedPingPongMessageSucceededIterator struct { + Event *SelfFundedPingPongMessageSucceeded contract *bind.BoundContract event string @@ -631,7 +1775,7 @@ type SelfFundedPingPongFundedIterator struct { fail error } -func (it *SelfFundedPingPongFundedIterator) Next() bool { +func (it *SelfFundedPingPongMessageSucceededIterator) Next() bool { if it.fail != nil { return false @@ -640,7 +1784,7 @@ func (it *SelfFundedPingPongFundedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongFunded) + it.Event = new(SelfFundedPingPongMessageSucceeded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -655,7 +1799,7 @@ func (it *SelfFundedPingPongFundedIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongFunded) + it.Event = new(SelfFundedPingPongMessageSucceeded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -670,31 +1814,42 @@ func (it *SelfFundedPingPongFundedIterator) Next() bool { } } -func (it *SelfFundedPingPongFundedIterator) Error() error { +func (it *SelfFundedPingPongMessageSucceededIterator) Error() error { return it.fail } -func (it *SelfFundedPingPongFundedIterator) Close() error { +func (it *SelfFundedPingPongMessageSucceededIterator) Close() error { it.sub.Unsubscribe() return nil } -type SelfFundedPingPongFunded struct { - Raw types.Log +type SelfFundedPingPongMessageSucceeded struct { + MessageId [32]byte + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterFunded(opts *bind.FilterOpts) (*SelfFundedPingPongFundedIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageSucceededIterator, error) { - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "Funded") + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageSucceeded", messageIdRule) if err != nil { return nil, err } - return &SelfFundedPingPongFundedIterator{contract: _SelfFundedPingPong.contract, event: "Funded", logs: logs, sub: sub}, nil + return &SelfFundedPingPongMessageSucceededIterator{contract: _SelfFundedPingPong.contract, event: "MessageSucceeded", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchFunded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongFunded) (event.Subscription, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSucceeded, messageId [][32]byte) (event.Subscription, error) { - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "Funded") + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageSucceeded", messageIdRule) if err != nil { return nil, err } @@ -704,8 +1859,8 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchFunded(opts *bind.Wa select { case log := <-logs: - event := new(SelfFundedPingPongFunded) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "Funded", log); err != nil { + event := new(SelfFundedPingPongMessageSucceeded) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageSucceeded", log); err != nil { return err } event.Raw = log @@ -726,9 +1881,9 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchFunded(opts *bind.Wa }), nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseFunded(log types.Log) (*SelfFundedPingPongFunded, error) { - event := new(SelfFundedPingPongFunded) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "Funded", log); err != nil { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageSucceeded(log types.Log) (*SelfFundedPingPongMessageSucceeded, error) { + event := new(SelfFundedPingPongMessageSucceeded) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageSucceeded", log); err != nil { return nil, err } event.Raw = log @@ -1241,12 +2396,31 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParsePong(log types.Log) return event, nil } +type SChains struct { + Recipient []byte + ExtraArgsBytes []byte +} + func (_SelfFundedPingPong *SelfFundedPingPong) ParseLog(log types.Log) (generated.AbigenLog, error) { switch log.Topics[0] { case _SelfFundedPingPong.abi.Events["CountIncrBeforeFundingSet"].ID: return _SelfFundedPingPong.ParseCountIncrBeforeFundingSet(log) + case _SelfFundedPingPong.abi.Events["FeeTokenModified"].ID: + return _SelfFundedPingPong.ParseFeeTokenModified(log) case _SelfFundedPingPong.abi.Events["Funded"].ID: return _SelfFundedPingPong.ParseFunded(log) + case _SelfFundedPingPong.abi.Events["MessageAckReceived"].ID: + return _SelfFundedPingPong.ParseMessageAckReceived(log) + case _SelfFundedPingPong.abi.Events["MessageAckSent"].ID: + return _SelfFundedPingPong.ParseMessageAckSent(log) + case _SelfFundedPingPong.abi.Events["MessageFailed"].ID: + return _SelfFundedPingPong.ParseMessageFailed(log) + case _SelfFundedPingPong.abi.Events["MessageRecovered"].ID: + return _SelfFundedPingPong.ParseMessageRecovered(log) + case _SelfFundedPingPong.abi.Events["MessageSent"].ID: + return _SelfFundedPingPong.ParseMessageSent(log) + case _SelfFundedPingPong.abi.Events["MessageSucceeded"].ID: + return _SelfFundedPingPong.ParseMessageSucceeded(log) case _SelfFundedPingPong.abi.Events["OwnershipTransferRequested"].ID: return _SelfFundedPingPong.ParseOwnershipTransferRequested(log) case _SelfFundedPingPong.abi.Events["OwnershipTransferred"].ID: @@ -1265,10 +2439,38 @@ func (SelfFundedPingPongCountIncrBeforeFundingSet) Topic() common.Hash { return common.HexToHash("0x4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf3") } +func (SelfFundedPingPongFeeTokenModified) Topic() common.Hash { + return common.HexToHash("0x4a1cb6b940121ea2ba30fb9b494035cbfe2d4b6b080db8b502150410bef7eb4e") +} + func (SelfFundedPingPongFunded) Topic() common.Hash { return common.HexToHash("0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c") } +func (SelfFundedPingPongMessageAckReceived) Topic() common.Hash { + return common.HexToHash("0xef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79") +} + +func (SelfFundedPingPongMessageAckSent) Topic() common.Hash { + return common.HexToHash("0x75944f95ba0be568cb30faeb0ef135cb73d07006939da29722d670a97f5c5b26") +} + +func (SelfFundedPingPongMessageFailed) Topic() common.Hash { + return common.HexToHash("0x55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f") +} + +func (SelfFundedPingPongMessageRecovered) Topic() common.Hash { + return common.HexToHash("0xef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad") +} + +func (SelfFundedPingPongMessageSent) Topic() common.Hash { + return common.HexToHash("0x9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372") +} + +func (SelfFundedPingPongMessageSucceeded) Topic() common.Hash { + return common.HexToHash("0xdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f") +} + func (SelfFundedPingPongOwnershipTransferRequested) Topic() common.Hash { return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") } @@ -1290,21 +2492,33 @@ func (_SelfFundedPingPong *SelfFundedPingPong) Address() common.Address { } type SelfFundedPingPongInterface interface { + ACKMESSAGEMAGICBYTES(opts *bind.CallOpts) ([]byte, error) + GetCountIncrBeforeFunding(opts *bind.CallOpts) (uint8, error) GetCounterpartAddress(opts *bind.CallOpts) (common.Address, error) GetCounterpartChainSelector(opts *bind.CallOpts) (uint64, error) - GetFeeToken(opts *bind.CallOpts) (common.Address, error) + GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) + + GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) GetRouter(opts *bind.CallOpts) (common.Address, error) + IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) + IsPaused(opts *bind.CallOpts) (bool, error) Owner(opts *bind.CallOpts) (common.Address, error) - SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + SChains(opts *bind.CallOpts, arg0 uint64) (SChains, + + error) + + SFeeToken(opts *bind.CallOpts) (common.Address, error) + + SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) TypeAndVersion(opts *bind.CallOpts) (string, error) @@ -1312,34 +2526,100 @@ type SelfFundedPingPongInterface interface { CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + CcipSend(opts *bind.TransactOpts, destChainSelector uint64, tokenAmounts []ClientEVMTokenAmount, data []byte, feeToken common.Address) (*types.Transaction, error) + + DisableChain(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) + + EnableChain(opts *bind.TransactOpts, chainSelector uint64, recipient []byte, _extraArgsBytes []byte) (*types.Transaction, error) + FundPingPong(opts *bind.TransactOpts, pingPongCount *big.Int) (*types.Transaction, error) + ModifyFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) + + ProcessMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + RetryFailedMessage(opts *bind.TransactOpts, messageId [32]byte) (*types.Transaction, error) + SetCountIncrBeforeFunding(opts *bind.TransactOpts, countIncrBeforeFunding uint8) (*types.Transaction, error) SetCounterpart(opts *bind.TransactOpts, counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) - SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) + SetCounterpartAddress(opts *bind.TransactOpts, counterpartAddress common.Address) (*types.Transaction, error) - SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) + SetCounterpartChainSelector(opts *bind.TransactOpts, counterpartChainSelector uint64) (*types.Transaction, error) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) + SetSimRevert(opts *bind.TransactOpts, simRevert bool) (*types.Transaction, error) + StartPingPong(opts *bind.TransactOpts) (*types.Transaction, error) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + UpdateApprovedSenders(opts *bind.TransactOpts, adds []ICCIPClientBaseapprovedSenderUpdate, removes []ICCIPClientBaseapprovedSenderUpdate) (*types.Transaction, error) + + WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) + + WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + + Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + FilterCountIncrBeforeFundingSet(opts *bind.FilterOpts) (*SelfFundedPingPongCountIncrBeforeFundingSetIterator, error) WatchCountIncrBeforeFundingSet(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongCountIncrBeforeFundingSet) (event.Subscription, error) ParseCountIncrBeforeFundingSet(log types.Log) (*SelfFundedPingPongCountIncrBeforeFundingSet, error) + FilterFeeTokenModified(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*SelfFundedPingPongFeeTokenModifiedIterator, error) + + WatchFeeTokenModified(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongFeeTokenModified, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) + + ParseFeeTokenModified(log types.Log) (*SelfFundedPingPongFeeTokenModified, error) + FilterFunded(opts *bind.FilterOpts) (*SelfFundedPingPongFundedIterator, error) WatchFunded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongFunded) (event.Subscription, error) ParseFunded(log types.Log) (*SelfFundedPingPongFunded, error) + FilterMessageAckReceived(opts *bind.FilterOpts) (*SelfFundedPingPongMessageAckReceivedIterator, error) + + WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAckReceived) (event.Subscription, error) + + ParseMessageAckReceived(log types.Log) (*SelfFundedPingPongMessageAckReceived, error) + + FilterMessageAckSent(opts *bind.FilterOpts) (*SelfFundedPingPongMessageAckSentIterator, error) + + WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAckSent) (event.Subscription, error) + + ParseMessageAckSent(log types.Log) (*SelfFundedPingPongMessageAckSent, error) + + FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageFailedIterator, error) + + WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageFailed, messageId [][32]byte) (event.Subscription, error) + + ParseMessageFailed(log types.Log) (*SelfFundedPingPongMessageFailed, error) + + FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageRecoveredIterator, error) + + WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageRecovered, messageId [][32]byte) (event.Subscription, error) + + ParseMessageRecovered(log types.Log) (*SelfFundedPingPongMessageRecovered, error) + + FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*SelfFundedPingPongMessageSentIterator, error) + + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) + + ParseMessageSent(log types.Log) (*SelfFundedPingPongMessageSent, error) + + FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageSucceededIterator, error) + + WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSucceeded, messageId [][32]byte) (event.Subscription, error) + + ParseMessageSucceeded(log types.Log) (*SelfFundedPingPongMessageSucceeded, error) + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*SelfFundedPingPongOwnershipTransferRequestedIterator, error) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) diff --git a/core/gethwrappers/ccip/go_generate.go b/core/gethwrappers/ccip/go_generate.go index 57a05ae411..d8d85ea4ec 100644 --- a/core/gethwrappers/ccip/go_generate.go +++ b/core/gethwrappers/ccip/go_generate.go @@ -33,9 +33,14 @@ package ccip //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.abi ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.bin MaybeRevertMessageReceiver maybe_revert_message_receiver //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin PingPongDemo ping_pong_demo //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin SelfFundedPingPong self_funded_ping_pong -//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin EtherSenderReceiver ether_sender_receiver //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/WETH9/WETH9.abi ../../../contracts/solc/v0.8.24/WETH9/WETH9.bin WETH9 weth9 +// Audited Reference Contracts +//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.abi ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.bin CCIPReceiver ccipReceiver +//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.abi ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.bin CCIPClient ccipClient +//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.abi ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.bin CCIPSender ccipSender +//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/CCIPReceiverWithAck/CCIPReceiverWithAck.abi ../../../contracts/solc/v0.8.24/CCIPReceiverWithAck/CCIPReceiverWithAck.bin CCIPReceiverWithAck ccipReceiverWithAck + // Customer contracts //go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.abi ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.bin USDCTokenPool usdc_token_pool