diff --git a/contracts/.gas-snapshot b/contracts/.gas-snapshot index e894e6a5d..806e89f63 100644 --- a/contracts/.gas-snapshot +++ b/contracts/.gas-snapshot @@ -65,53 +65,55 @@ OmniAVS_canRegister_Test:test_canRegister_notOperator() (gas: 119994) OmniAVS_initialize_Test:test_initialize_defaultParams_succeeds() (gas: 3591147) OmniAVS_syncWithOmni_Test:test_depositBeaconEth_succeeds() (gas: 631916) OmniAVS_syncWithOmni_Test:test_unsupportedStrategyDeposit_succeeds() (gas: 1532940) -OmniBridgeL1_Test:test_bridge() (gas: 218472) -OmniBridgeL1_Test:test_withdraw() (gas: 1057802) +OmniBridgeL1_Test:test_bridge() (gas: 218648) +OmniBridgeL1_Test:test_withdraw() (gas: 1057600) OmniBridgeNative_Test:test_bridge() (gas: 140234) -OmniBridgeNative_Test:test_claim() (gas: 290143) -OmniBridgeNative_Test:test_withdraw() (gas: 290054) -OmniPortal_admin_Test:test_pause() (gas: 70100715) -OmniPortal_admin_Test:test_setFeeOracle() (gas: 34996) -OmniPortal_adversarial:test_xcallToPortal__fails() (gas: 96528) +OmniBridgeNative_Test:test_claim() (gas: 289719) +OmniBridgeNative_Test:test_withdraw() (gas: 289697) +OmniPortal_admin_Test:test_pauseAll() (gas: 70112187) +OmniPortal_admin_Test:test_pauseXCall() (gas: 278232) +OmniPortal_admin_Test:test_pauseXSubmit() (gas: 224772) +OmniPortal_admin_Test:test_setFeeOracle() (gas: 34890) +OmniPortal_adversarial:test_xcallToPortal__fails() (gas: 96484) OmniPortal_exec_Test:test_call_notEnoughGas_reverts() (gas: 4997036) -OmniPortal_exec_Test:test_exec_aheadOffset_reverts() (gas: 26627) -OmniPortal_exec_Test:test_exec_behindOffset_reverts() (gas: 137837) -OmniPortal_exec_Test:test_exec_errorSize() (gas: 71960955) -OmniPortal_exec_Test:test_exec_wrongDestChainId_reverts() (gas: 24140) -OmniPortal_exec_Test:test_exec_xmsgRevert_succeeds() (gas: 94045) -OmniPortal_exec_Test:test_exec_xmsg_succeeds() (gas: 152024) -OmniPortal_exec_Test:test_syscall_forwardsRevert() (gas: 23093) -OmniPortal_feeFor_Test:test_feeFor_succeeds() (gas: 49628) -OmniPortal_xcall_Test:test_xcall_gasLimitTooHigh_reverts() (gas: 65414) -OmniPortal_xcall_Test:test_xcall_gasLimitTooLow_reverts() (gas: 65713) -OmniPortal_xcall_Test:test_xcall_insufficientFee_reverts() (gas: 71043) -OmniPortal_xcall_Test:test_xcall_sameChain_reverts() (gas: 61559) -OmniPortal_xcall_Test:test_xcall_succeeds() (gas: 106729) -OmniPortal_xcall_Test:test_xcall_unsupportedConf_reverts() (gas: 38247) -OmniPortal_xcall_Test:test_xcall_unsupportedDest_reverts() (gas: 33761) -OmniPortal_xsubmit_Test:test_xsubmit_addValidatorSet_succeeds() (gas: 70817666) -OmniPortal_xsubmit_Test:test_xsubmit_duplicateValidator_reverts() (gas: 69787181) -OmniPortal_xsubmit_Test:test_xsubmit_invalidAttestationRoot_reverts() (gas: 69834293) -OmniPortal_xsubmit_Test:test_xsubmit_invalidMsgs_reverts() (gas: 69821561) -OmniPortal_xsubmit_Test:test_xsubmit_noQuorum_reverts() (gas: 69793954) -OmniPortal_xsubmit_Test:test_xsubmit_noXmsgs_reverts() (gas: 69769480) -OmniPortal_xsubmit_Test:test_xsubmit_notNewValSet_succeeds() (gas: 70789550) -OmniPortal_xsubmit_Test:test_xsubmit_oldValSet_reverts() (gas: 69783377) -OmniPortal_xsubmit_Test:test_xsubmit_reentrancy_reverts() (gas: 69883149) -OmniPortal_xsubmit_Test:test_xsubmit_uknownValSetId_reverts() (gas: 69775129) -OmniPortal_xsubmit_Test:test_xsubmit_wrongDestChainId_reverts() (gas: 69822907) -OmniPortal_xsubmit_Test:test_xsubmit_wrongStreamOffset_reverts() (gas: 69825288) -OmniPortal_xsubmit_Test:test_xsubmit_xblock1_chainB_succeeds() (gas: 70033698) -OmniPortal_xsubmit_Test:test_xsubmit_xblock1_succeeds() (gas: 70034926) -OmniPortal_xsubmit_Test:test_xsubmit_xblock2_chainB_succeeds() (gas: 70743765) -OmniPortal_xsubmit_Test:test_xsubmit_xblock2_succeeds() (gas: 70746499) -OmniPortal_xsubmit_gas_Test:test_singleExec() (gas: 70365258) -OmniPortal_xsubmit_gas_Test:test_xsubmit_addValidator_succeeds() (gas: 69948808) -OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle10_succeeds() (gas: 71007048) -OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle1_succeeds() (gas: 69960539) -OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle25_succeeds() (gas: 72752026) -OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle50_succeeds() (gas: 75662515) -OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle5_succeeds() (gas: 70425590) +OmniPortal_exec_Test:test_exec_aheadOffset_reverts() (gas: 26583) +OmniPortal_exec_Test:test_exec_behindOffset_reverts() (gas: 137816) +OmniPortal_exec_Test:test_exec_errorSize() (gas: 71960824) +OmniPortal_exec_Test:test_exec_wrongDestChainId_reverts() (gas: 24096) +OmniPortal_exec_Test:test_exec_xmsgRevert_succeeds() (gas: 94046) +OmniPortal_exec_Test:test_exec_xmsg_succeeds() (gas: 152092) +OmniPortal_exec_Test:test_syscall_forwardsRevert() (gas: 23028) +OmniPortal_feeFor_Test:test_feeFor_succeeds() (gas: 49540) +OmniPortal_xcall_Test:test_xcall_gasLimitTooHigh_reverts() (gas: 70138) +OmniPortal_xcall_Test:test_xcall_gasLimitTooLow_reverts() (gas: 70326) +OmniPortal_xcall_Test:test_xcall_insufficientFee_reverts() (gas: 75722) +OmniPortal_xcall_Test:test_xcall_sameChain_reverts() (gas: 66238) +OmniPortal_xcall_Test:test_xcall_succeeds() (gas: 111412) +OmniPortal_xcall_Test:test_xcall_unsupportedConf_reverts() (gas: 42992) +OmniPortal_xcall_Test:test_xcall_unsupportedDest_reverts() (gas: 38506) +OmniPortal_xsubmit_Test:test_xsubmit_addValidatorSet_succeeds() (gas: 70826129) +OmniPortal_xsubmit_Test:test_xsubmit_duplicateValidator_reverts() (gas: 69792193) +OmniPortal_xsubmit_Test:test_xsubmit_invalidAttestationRoot_reverts() (gas: 69839353) +OmniPortal_xsubmit_Test:test_xsubmit_invalidMsgs_reverts() (gas: 69826621) +OmniPortal_xsubmit_Test:test_xsubmit_noQuorum_reverts() (gas: 69798965) +OmniPortal_xsubmit_Test:test_xsubmit_noXmsgs_reverts() (gas: 69774496) +OmniPortal_xsubmit_Test:test_xsubmit_notNewValSet_succeeds() (gas: 70797987) +OmniPortal_xsubmit_Test:test_xsubmit_oldValSet_reverts() (gas: 69788459) +OmniPortal_xsubmit_Test:test_xsubmit_reentrancy_reverts() (gas: 69891174) +OmniPortal_xsubmit_Test:test_xsubmit_uknownValSetId_reverts() (gas: 69780145) +OmniPortal_xsubmit_Test:test_xsubmit_wrongDestChainId_reverts() (gas: 69827967) +OmniPortal_xsubmit_Test:test_xsubmit_wrongStreamOffset_reverts() (gas: 69830348) +OmniPortal_xsubmit_Test:test_xsubmit_xblock1_chainB_succeeds() (gas: 70039125) +OmniPortal_xsubmit_Test:test_xsubmit_xblock1_succeeds() (gas: 70040353) +OmniPortal_xsubmit_Test:test_xsubmit_xblock2_chainB_succeeds() (gas: 70750540) +OmniPortal_xsubmit_Test:test_xsubmit_xblock2_succeeds() (gas: 70753263) +OmniPortal_xsubmit_gas_Test:test_singleExec() (gas: 70365038) +OmniPortal_xsubmit_gas_Test:test_xsubmit_addValidator_succeeds() (gas: 69953908) +OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle10_succeeds() (gas: 71012198) +OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle1_succeeds() (gas: 69965652) +OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle25_succeeds() (gas: 72757247) +OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle50_succeeds() (gas: 75667944) +OmniPortal_xsubmit_gas_Test:test_xsubmit_guzzle5_succeeds() (gas: 70430716) Omni_Test:test_constructor() (gas: 1006927) PortalRegistry_Test:test_register() (gas: 798740) Quorum_Test:test_verify_allInvalidSigs_reverts() (gas: 281140) diff --git a/contracts/bindings/omnibridgenative_storage_layout.json b/contracts/bindings/omnibridgenative_storage_layout.json index 3d80eb90a..452c67e3d 100644 --- a/contracts/bindings/omnibridgenative_storage_layout.json +++ b/contracts/bindings/omnibridgenative_storage_layout.json @@ -17,7 +17,7 @@ "type": "t_bool" }, { - "astId": 993, + "astId": 865, "contract": "src/token/OmniBridgeNative.sol:OmniBridgeNative", "label": "__gap", "offset": 0, @@ -41,7 +41,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 52347, + "astId": 52041, "contract": "src/token/OmniBridgeNative.sol:OmniBridgeNative", "label": "l1ChainId", "offset": 0, @@ -49,15 +49,15 @@ "type": "t_uint64" }, { - "astId": 52351, + "astId": 52045, "contract": "src/token/OmniBridgeNative.sol:OmniBridgeNative", "label": "omni", "offset": 8, "slot": "101", - "type": "t_contract(IOmniPortal)51182" + "type": "t_contract(IOmniPortal)51054" }, { - "astId": 52354, + "astId": 52048, "contract": "src/token/OmniBridgeNative.sol:OmniBridgeNative", "label": "l1BridgeBalance", "offset": 0, @@ -65,7 +65,7 @@ "type": "t_uint256" }, { - "astId": 52357, + "astId": 52051, "contract": "src/token/OmniBridgeNative.sol:OmniBridgeNative", "label": "l1Bridge", "offset": 0, @@ -73,7 +73,7 @@ "type": "t_address" }, { - "astId": 52362, + "astId": 52056, "contract": "src/token/OmniBridgeNative.sol:OmniBridgeNative", "label": "claimable", "offset": 0, @@ -104,7 +104,7 @@ "label": "bool", "numberOfBytes": "1" }, - "t_contract(IOmniPortal)51182": { + "t_contract(IOmniPortal)51054": { "encoding": "inplace", "label": "contract IOmniPortal", "numberOfBytes": "20" diff --git a/contracts/bindings/omniportal.go b/contracts/bindings/omniportal.go index 02b41c00d..4f8f680f2 100644 --- a/contracts/bindings/omniportal.go +++ b/contracts/bindings/omniportal.go @@ -102,8 +102,8 @@ type XTypesValidator struct { // OmniPortalMetaData contains all meta data concerning the OmniPortal contract. var OmniPortalMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"XSUB_QUORUM_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XSUB_QUORUM_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XSUB_VALSET_CUTOFF\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addValidatorSet\",\"inputs\":[{\"name\":\"valSetId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"validators\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Validator[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"power\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"chainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"collectFees\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"feeFor\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"feeOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inXBlockOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inXMsgOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"p\",\"type\":\"tuple\",\"internalType\":\"structOmniPortal.InitParams\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"omniChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"omniCChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"xmsgMaxGasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"xmsgMinGasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"xmsgMaxDataSize\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"xreceiptMaxErrorSize\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"cChainXMsgOffset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"cChainXBlockOffset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"valSetId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"validators\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Validator[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"power\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isSupportedDest\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedShard\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isXCall\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestValSetId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"network\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omniCChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omniChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"outXMsgOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeeOracle\",\"inputs\":[{\"name\":\"feeOracle_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setNetwork\",\"inputs\":[{\"name\":\"network_\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Chain[]\",\"components\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"shards\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXMsgMaxDataSize\",\"inputs\":[{\"name\":\"numBytes\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXMsgMaxGasLimit\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXMsgMinGasLimit\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXReceiptMaxErrorSize\",\"inputs\":[{\"name\":\"numBytes\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valSet\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"valSetTotalPower\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xcall\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"conf\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"xmsg\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structXTypes.MsgShort\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xmsgMaxDataSize\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xmsgMaxGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xmsgMinGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xreceiptMaxErrorSize\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xsubmit\",\"inputs\":[{\"name\":\"xsub\",\"type\":\"tuple\",\"internalType\":\"structXTypes.Submission\",\"components\":[{\"name\":\"attestationRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorSetId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHeader\",\"type\":\"tuple\",\"internalType\":\"structXTypes.BlockHeader\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"confLevel\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"offset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sourceBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"msgs\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Msg[]\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"shardId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"offset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proofFlags\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"},{\"name\":\"signatures\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.SigTuple[]\",\"components\":[{\"name\":\"validatorAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"FeeOracleChanged\",\"inputs\":[{\"name\":\"oldOracle\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOrcale\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeesCollected\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorSetAdded\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XMsg\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"shardId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"offset\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"fees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XMsgMaxDataSizeChanged\",\"inputs\":[{\"name\":\"oldMax\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"},{\"name\":\"newMax\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XMsgMaxGasLimitChanged\",\"inputs\":[{\"name\":\"oldMax\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"newMax\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XMsgMinGasLimitChanged\",\"inputs\":[{\"name\":\"oldMin\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"newMin\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XReceipt\",\"inputs\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"shardId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"offset\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"gasUsed\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"relayer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XReceiptMaxErrorSizeChanged\",\"inputs\":[{\"name\":\"oldMax\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"},{\"name\":\"newMax\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61406480620000f36000396000f3fe60806040526004361061023b5760003560e01c80638456cb591161012e578063b4d5afd1116100ab578063c26dfc051161006f578063c26dfc05146107a1578063cf84c818146107bc578063d051c97d146107e4578063f2fde38b14610825578063f45cc7b81461084557600080fd5b8063b4d5afd1146106fa578063b521466d1461072e578063bb8590ad1461074e578063bff0e84d1461076e578063c21dda4f1461078e57600080fd5b8063a480ca79116100f2578063a480ca791461063f578063a6cfb9781461065f578063a8a9896214610674578063aaf1bc9714610694578063afe8af9c146106c457600080fd5b80638456cb59146105ab5780638532eb9f146105c05780638da5cb5b146105e05780638dd9523c146105fe5780639a8a05921461062c57600080fd5b80634a1ec0bd116101bc5780635c975abb116101805780635c975abb14610517578063715018a61461052f57806374eba9391461054457806378fe53071461056457806382b0084c1461058b57600080fd5b80634a1ec0bd146104495780634f93e91f14610469578063500b19e71461047e57806355e2448e146104b657806357542050146104d657600080fd5b806336d219121161020357806336d219121461036b57806336d853f9146103925780633aa87330146103b25780633f4ba83a146103f35780633fd3b15e1461040857600080fd5b806303f2453614610240578063110ff5f11461026c5780631d3eb6e3146102a457806324278bbe146102c65780632f32700e14610306575b600080fd5b34801561024c57600080fd5b50610255600a81565b60405160ff90911681526020015b60405180910390f35b34801561027857600080fd5b5060ca5461028c906001600160401b031681565b6040516001600160401b039091168152602001610263565b3480156102b057600080fd5b506102c46102bf366004613377565b61086c565b005b3480156102d257600080fd5b506102f66102e1366004613410565b60ce6020526000908152604090205460ff1681565b6040519015158152602001610263565b34801561031257600080fd5b5060408051808201825260008082526020918201528151808301835260d4546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610263565b34801561037757600080fd5b5060ca5461028c90600160401b90046001600160401b031681565b34801561039e57600080fd5b506102c46103ad366004613410565b610987565b3480156103be57600080fd5b5061028c6103cd36600461342d565b60cf6020908152600092835260408084209091529082529020546001600160401b031681565b3480156103ff57600080fd5b506102c461099b565b34801561041457600080fd5b5061028c61042336600461342d565b60d16020908152600092835260408084209091529082529020546001600160401b031681565b34801561045557600080fd5b506102c4610464366004613466565b6109ad565b34801561047557600080fd5b50610255600381565b34801561048a57600080fd5b5060cb5461049e906001600160a01b031681565b6040516001600160a01b039091168152602001610263565b3480156104c257600080fd5b5060d4546001600160401b031615156102f6565b3480156104e257600080fd5b5061028c6104f13660046134b8565b60d36020908152600092835260408084209091529082529020546001600160401b031681565b34801561052357600080fd5b5060655460ff166102f6565b34801561053b57600080fd5b506102c4610cae565b34801561055057600080fd5b5061028c61055f3660046134ed565b610cc0565b34801561057057600080fd5b5060c95461028c90600160601b90046001600160401b031681565b34801561059757600080fd5b506102c46105a6366004613506565b610cef565b3480156105b757600080fd5b506102c4610f96565b3480156105cc57600080fd5b506102c46105db366004613541565b610fa6565b3480156105ec57600080fd5b506033546001600160a01b031661049e565b34801561060a57600080fd5b5061061e610619366004613609565b6110be565b604051908152602001610263565b34801561063857600080fd5b504661028c565b34801561064b57600080fd5b506102c461065a366004613670565b61113f565b34801561066b57600080fd5b50610255600281565b34801561068057600080fd5b506102c461068f366004613670565b6111c7565b3480156106a057600080fd5b506102f66106af366004613410565b60cd6020526000908152604090205460ff1681565b3480156106d057600080fd5b5061028c6106df366004613410565b60d2602052600090815260409020546001600160401b031681565b34801561070657600080fd5b5060c95461071b9062010000900461ffff1681565b60405161ffff9091168152602001610263565b34801561073a57600080fd5b506102c461074936600461368b565b6111d8565b34801561075a57600080fd5b506102c4610769366004613410565b6111e9565b34801561077a57600080fd5b506102c461078936600461368b565b6111fa565b6102c461079c3660046136c0565b61120b565b3480156107ad57600080fd5b5060c95461071b9061ffff1681565b3480156107c857600080fd5b5060c95461028c9064010000000090046001600160401b031681565b3480156107f057600080fd5b5061028c6107ff36600461342d565b60d06020908152600092835260408084209091529082529020546001600160401b031681565b34801561083157600080fd5b506102c4610840366004613670565b611589565b34801561085157600080fd5b5060c95461028c90600160a01b90046001600160401b031681565b3330146108b85760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b60448201526064015b60405180910390fd5b60ca5460d4546001600160401b03908116600160401b90920416146109195760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b60448201526064016108af565b60d454600160401b90046001600160a01b0316156109795760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e646572000060448201526064016108af565b61098382826115ff565b5050565b61098f611779565b610998816117d3565b50565b6109a3611779565b6109ab61188d565b565b600054610100900460ff16158080156109cd5750600054600160ff909116105b806109e75750303b1580156109e7575060005460ff166001145b610a4a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108af565b6000805460ff191660011790558015610a6d576000805461ff0019166101001790555b610a82610a7d6020840184613670565b6118df565b610a9a610a956040840160208501613670565b611931565b610ab2610aad60a0840160808501613410565b6117d3565b610aca610ac560c0840160a08501613410565b6119d9565b610ae2610add60e0840160c0850161368b565b611a91565b610afb610af6610100840160e0850161368b565b611b37565b610b23610b1061016084016101408501613410565b610b1e610160850185613749565b611bd3565b610b336060830160408401613410565b60ca805467ffffffffffffffff19166001600160401b0392909216919091179055610b646080830160608401613410565b60ca80546001600160401b0392909216600160401b026fffffffffffffffff000000000000000019909216919091179055610104610baa61012084016101008501613410565b60d06000610bbe6080870160608801613410565b6001600160401b0390811682526020808301939093526040918201600090812086831682529093529120805467ffffffffffffffff191692909116919091179055610c1161014084016101208501613410565b60d16000610c256080870160608801613410565b6001600160401b03908116825260208083019390935260409182016000908120958216815294909252909220805467ffffffffffffffff1916919092161790558015610983576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610cb6611779565b6109ab60006118df565b60cc8181548110610cd057600080fd5b60009182526020909120600290910201546001600160401b0316905081565b610cf7611f04565b610cff611f4a565b366000610d0f60c0840184613792565b9092509050604083016000610d278260208701613410565b905082610d6d5760405162461bcd60e51b81526020600482015260146024820152734f6d6e69506f7274616c3a206e6f20786d73677360601b60448201526064016108af565b6001600160401b03808216600090815260d2602052604090205416610dd45760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a20756e6b6e6f776e2076616c20736574000000000060448201526064016108af565b610ddc611fa3565b6001600160401b0316816001600160401b03161015610e3d5760405162461bcd60e51b815260206004820152601760248201527f4f6d6e69506f7274616c3a206f6c642076616c2073657400000000000000000060448201526064016108af565b610e818535610e50610120880188613792565b6001600160401b03808616600090815260d36020908152604080832060d29092529091205490911660026003611ff6565b610ec55760405162461bcd60e51b81526020600482015260156024820152744f6d6e69506f7274616c3a206e6f2071756f72756d60581b60448201526064016108af565b610eed8535838686610eda60e08b018b613792565b610ee86101008d018d613792565b612218565b610f395760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a20696e76616c69642070726f6f660000000000000060448201526064016108af565b60005b83811015610f8757610f7f610f5636859003850185613849565b868684818110610f6857610f686138c4565b9050602002810190610f7a91906138da565b612293565b600101610f3c565b50505050506109986001609755565b610f9e611779565b6109ab61280d565b333014610fed5760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b60448201526064016108af565b60ca5460d4546001600160401b03908116600160401b909204161461104e5760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b60448201526064016108af565b60d454600160401b90046001600160a01b0316156110ae5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e646572000060448201526064016108af565b6110b9838383611bd3565b505050565b60cb54604051632376548f60e21b81526000916001600160a01b031690638dd9523c906110f5908890889088908890600401613923565b602060405180830381865afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611136919061395b565b95945050505050565b611147611779565b60405147906001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561117f573d6000803e3d6000fd5b50816001600160a01b03167f9dc46f23cfb5ddcad0ae7ea2be38d47fec07bb9382ec7e564efc69e036dd66ce826040516111bb91815260200190565b60405180910390a25050565b6111cf611779565b61099881611931565b6111e0611779565b61099881611a91565b6111f1611779565b610998816119d9565b611202611779565b61099881611b37565b611213611f04565b6001600160401b038616600090815260ce602052604090205460ff1661127b5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420646573740000000060448201526064016108af565b6001600160a01b0384166112d15760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c000000000060448201526064016108af565b60c9546001600160401b03640100000000909104811690821611156113385760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064016108af565b60c9546001600160401b03600160601b9091048116908216101561139e5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f770000000060448201526064016108af565b60c95462010000900461ffff168211156113fa5760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206461746120746f6f206c6172676500000000000060448201526064016108af565b60ff808616600081815260cd602052604090205490911661145d5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a20756e737570706f7274656420736861726400000060448201526064016108af565b600061146b888686866110be565b9050803410156114bd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e74206665650000000060448201526064016108af565b6001600160401b03808916600090815260cf602090815260408083208685168452909152812080546001939192916114f79185911661398a565b82546101009290920a6001600160401b03818102199093169183160217909155898116600081815260cf602090815260408083208886168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa906115779033908c908c908c908c908b906139b1565b60405180910390a45050505050505050565b611591611779565b6001600160a01b0381166115f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108af565b610998816118df565b61160761284a565b3660005b8281101561177357838382818110611625576116256138c4565b905060200281019061163791906139fc565b60cc805460018101825560009190915290925082906002027f47197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe0161167b8282613aa0565b50506116844690565b6001600160401b031661169a6020840184613410565b6001600160401b0316146116e857600160ce60006116bb6020860186613410565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905561176b565b60005b6116f86020840184613792565b905081101561176957600160cd60006117146020870187613792565b85818110611724576117246138c4565b90506020020160208101906117399190613410565b6001600160401b031681526020810191909152604001600020805460ff19169115159190911790556001016116eb565b505b60010161160b565b50505050565b6033546001600160a01b031633146109ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108af565b6000816001600160401b03161161182c5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d617820676173000000000060448201526064016108af565b60c980546001600160401b038381166401000000008181026bffffffffffffffff000000001985161790945560405193909204169182907f251f3ae1733d684e5cac178693d5377ceed13586692070e29ba70b0aa1f3fc2a90600090a35050565b611895612949565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381166119875760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206665654f7261636c6500000060448201526064016108af565b60cb80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f2819896846ed9ab612eb19218fd845f8328f084c8706b9ec2c47eabd479037a290600090a35050565b6000816001600160401b031611611a325760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d696e20676173000000000060448201526064016108af565b60c980546001600160401b03838116600160601b81810267ffffffffffffffff60601b1985161790945560405193909204169182907f7f60dee945e48cd3b3dc543aa68ce448509f2d31dd910ae06a2dbddf939ed80e90600090a35050565b60008161ffff1611611ae55760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a650000000060448201526064016108af565b60c9805461ffff8381166201000081810263ffff00001985161790945560405193909204169182907f1fa383c9f092bcdae4b6b15330b7c642f1df85e00b50114243023df76add2a0d90600090a35050565b60008161ffff1611611b8b5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a650000000060448201526064016108af565b60c9805461ffff83811661ffff19831681179093556040519116919082907f2576c5c6f7ebaa5b68f8f301ebc37b011c2769fdb448b7c6dc47d185f72c82d890600090a35050565b8080611c215760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f2076616c696461746f72730000000000000060448201526064016108af565b6001600160401b03808516600090815260d260205260409020541615611c895760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c2073657400000060448201526064016108af565b604080518082018252600080825260208083018290526001600160401b038816825260d39052918220825b84811015611e6157868682818110611cce57611cce6138c4565b905060400201803603810190611ce49190613bc8565b80519093506001600160a01b0316611d3e5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f2076616c696461746f7200000060448201526064016108af565b600083602001516001600160401b031611611d9b5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f207a65726f20706f7765720000000000000060448201526064016108af565b82516001600160a01b03166000908152602083905260409020546001600160401b031615611e0b5760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c696461746f720060448201526064016108af565b6020830151611e1a908561398a565b60208481015185516001600160a01b03166000908152918590526040909120805467ffffffffffffffff19166001600160401b039092169190911790559350600101611cb4565b506001600160401b03878116600081815260d260205260409020805467ffffffffffffffff191686841617905560c954600160a01b90049091161015611ec75760c9805467ffffffffffffffff60a01b1916600160a01b6001600160401b038a16021790555b6040516001600160401b038816907f3a7c2f997a87ba92aedaecd1127f4129cae1283e2809ebf5304d321b943fd10790600090a250505050505050565b60655460ff16156109ab5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108af565b600260975403611f9c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108af565b6002609755565b60c954600090600a600160a01b9091046001600160401b031611611fc75750600190565b60c954611fe690600a90600160a01b90046001600160401b0316613c07565b611ff190600161398a565b905090565b6000803660005b8881101561220557898982818110612017576120176138c4565b905060200281019061202991906139fc565b9150801561214b5760008a8a612040600185613c27565b81811061204f5761204f6138c4565b905060200281019061206191906139fc565b61206a90613c3a565b80519091506001600160a01b03166120856020850185613670565b6001600160a01b0316036120db5760405162461bcd60e51b815260206004820152601b60248201527f51756f72756d3a206475706c69636174652076616c696461746f72000000000060448201526064016108af565b80516001600160a01b03166120f36020850185613670565b6001600160a01b0316116121495760405162461bcd60e51b815260206004820152601760248201527f51756f72756d3a2073696773206e6f7420736f7274656400000000000000000060448201526064016108af565b505b612155828c612992565b6121a15760405162461bcd60e51b815260206004820152601960248201527f51756f72756d3a20696e76616c6964207369676e61747572650000000000000060448201526064016108af565b8760006121b16020850185613670565b6001600160a01b031681526020810191909152604001600020546121de906001600160401b03168461398a565b92506121ec83888888612a08565b156121fd576001935050505061220d565b600101611ffd565b506000925050505b979650505050505050565b604080516001808252818301909252600091829190602080830190803683370190505090506122538686868661224e8d8d612a45565b612b10565b81600081518110612266576122666138c4565b602002602001018181525050612285818b6122808c612dd1565b612de7565b9a9950505050505050505050565b60006122a26020830183613410565b905060006122b66040840160208501613410565b905060006122ca6060850160408601613410565b905060006122de6080860160608701613410565b905085600001516001600160401b0316846001600160401b0316146123455760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a2077726f6e6720736f7572636520636861696e000060448201526064016108af565b466001600160401b0316836001600160401b0316148061236c57506001600160401b038316155b6123b85760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e67206465737420636861696e0000000060448201526064016108af565b6001600160401b03808516600090815260d06020908152604080832086851684529091529020546123eb9116600161398a565b6001600160401b0316816001600160401b03161461244b5760405162461bcd60e51b815260206004820152601860248201527f4f6d6e69506f7274616c3a2077726f6e67206f6666736574000000000000000060448201526064016108af565b856020015160ff16600460ff16148061246d57508160ff16866020015160ff16145b6124b95760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e6720636f6e66206c6576656c0000000060448201526064016108af565b6040808701516001600160401b03868116600090815260d1602090815284822087841683529052929092205490821691161015612533576040868101516001600160401b03868116600090815260d160209081528482208784168352905292909220805467ffffffffffffffff1916929091169190911790555b6001600160401b03808516600090815260d06020908152604080832086851684529091528120805460019391929161256d9185911661398a565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550306001600160a01b03168560a00160208101906125ae9190613670565b6001600160a01b03160361268857806001600160401b0316826001600160401b0316856001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b6000336000604051602401612641906020808252601e908201527f4f6d6e69506f7274616c3a206e6f207863616c6c20746f20706f7274616c0000604082015260600190565b60408051601f198184030181529181526020820180516001600160e01b031662461bcd60e51b179052516126789493929190613d2b565b60405180910390a4505050505050565b604080518082019091526001600160401b0385168152602081016126b260a0880160808901613670565b6001600160a01b03908116909152815160d48054602090940151909216600160401b026001600160e01b03199093166001600160401b0390911617919091179055600080808061270860c08a0160a08b01613670565b6001600160a01b03161461275a5761275561272960c08a0160a08b01613670565b61273a6101008b0160e08c01613410565b6001600160401b031661275060c08c018c613d67565b612dfd565b61276f565b61276f61276a60c08a018a613d67565b612ebd565b60d480546001600160e01b03191690559194509250905060008361279357826127a4565b604051806020016040528060008152505b9050846001600160401b0316866001600160401b0316896001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b853389876040516127f99493929190613d2b565b60405180910390a450505050505050505050565b612815611f04565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118c23390565b6000805b60cc5481101561293c5760cc818154811061286b5761286b6138c4565b906000526020600020906002020191506128824690565b82546001600160401b039081169116146128bc5781546001600160401b0316600090815260ce60205260409020805460ff19169055612934565b60005b600183015481101561293257600060cd60008560010184815481106128e6576128e66138c4565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b031683528201929092526040019020805460ff19169115159190911790556001016128bf565b505b60010161284e565b5061099860cc60006132f2565b60655460ff166109ab5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108af565b60006129a16020840184613670565b6001600160a01b03166129f5836129bb6020870187613d67565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5392505050565b6001600160a01b03161490505b92915050565b60008160ff168360ff1685612a1d9190613dad565b612a279190613dee565b6001600160401b0316856001600160401b0316119050949350505050565b60606000826001600160401b03811115612a6157612a616137db565b604051908082528060200260200182016040528015612a8a578160200160208202803683370190505b50905060005b83811015612b0857612ae3858583818110612aad57612aad6138c4565b9050602002810190612abf91906138da565b604051602001612acf9190613e59565b604051602081830303815290604052612f6f565b828281518110612af557612af56138c4565b6020908102919091010152600101612a90565b509392505050565b80516000908584806001612b248486613f4f565b612b2e9190613c27565b14612b7b5760405162461bcd60e51b815260206004820152601f60248201527f4d65726b6c6550726f6f663a20696e76616c6964206d756c746970726f6f660060448201526064016108af565b6000816001600160401b03811115612b9557612b956137db565b604051908082528060200260200182016040528015612bbe578160200160208202803683370190505b5090506000806000805b85811015612d0b576000888510612c03578584612be481613f62565b955081518110612bf657612bf66138c4565b6020026020010151612c29565b8a85612c0e81613f62565b965081518110612c2057612c206138c4565b60200260200101515b905060008d8d84818110612c3f57612c3f6138c4565b9050602002016020810190612c549190613f7b565b612c81578f8f85612c6481613f62565b9650818110612c7557612c756138c4565b90506020020135612cd8565b898610612cb2578685612c9381613f62565b965081518110612ca557612ca56138c4565b6020026020010151612cd8565b8b86612cbd81613f62565b975081518110612ccf57612ccf6138c4565b60200260200101515b9050612ce48282612fa8565b878481518110612cf657612cf66138c4565b60209081029190910101525050600101612bc8565b508415612d8c57858114612d615760405162461bcd60e51b815260206004820152601f60248201527f4d65726b6c6550726f6f663a20696e76616c6964206d756c746970726f6f660060448201526064016108af565b836001860381518110612d7657612d766138c4565b6020026020010151975050505050505050611136565b8615612da55788600081518110612d7657612d766138c4565b8c8c6000818110612db857612db86138c4565b9050602002013597505050505050505095945050505050565b6000612a0282604051602001612acf9190613f9d565b600082612df48584612fda565b14949350505050565b600060606000805a9050600080612e8189600060c960009054906101000a900461ffff168b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e6001600160a01b031661301590949392919063ffffffff16565b9150915060005a9050612e95603f8b613ff4565b8111612e9d57fe5b8282612ea98387613c27565b965096509650505050509450945094915050565b600060606000805a9050600080306001600160a01b03168888604051612ee4929190614008565b6000604051808303816000865af19150503d8060008114612f21576040519150601f19603f3d011682016040523d82523d6000602084013e612f26565b606091505b50915091505a612f369084613c27565b925081612f4557805160208201fd5b909450925090509250925092565b6000806000612f62858561309f565b91509150612b08816130e4565b60008180519060200120604051602001612f8b91815260200190565b604051602081830303815290604052805190602001209050919050565b6000818310612fc4576000828152602084905260409020612fd3565b60008381526020839052604090205b9392505050565b600081815b8451811015612b085761300b82868381518110612ffe57612ffe6138c4565b6020026020010151612fa8565b9150600101612fdf565b6000606060008060008661ffff166001600160401b0381111561303a5761303a6137db565b6040519080825280601f01601f191660200182016040528015613064576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115613085578692505b828152826000602083013e90999098509650505050505050565b60008082516041036130d55760208301516040840151606085015160001a6130c98782858561322e565b945094505050506130dd565b506000905060025b9250929050565b60008160048111156130f8576130f8614018565b036131005750565b600181600481111561311457613114614018565b036131615760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108af565b600281600481111561317557613175614018565b036131c25760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108af565b60038160048111156131d6576131d6614018565b036109985760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108af565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561326557506000905060036132e9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156132b9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166132e2576000600192509250506132e9565b9150600090505b94509492505050565b508054600082556002029060005260206000209081019061099891905b8082111561333e57805467ffffffffffffffff1916815560006133356001830182613342565b5060020161330f565b5090565b50805460008255600301600490049060005260206000209081019061099891905b8082111561333e5760008155600101613363565b6000806020838503121561338a57600080fd5b82356001600160401b03808211156133a157600080fd5b818501915085601f8301126133b557600080fd5b8135818111156133c457600080fd5b8660208260051b85010111156133d957600080fd5b60209290920196919550909350505050565b6001600160401b038116811461099857600080fd5b803561340b816133eb565b919050565b60006020828403121561342257600080fd5b8135612fd3816133eb565b6000806040838503121561344057600080fd5b823561344b816133eb565b9150602083013561345b816133eb565b809150509250929050565b60006020828403121561347857600080fd5b81356001600160401b0381111561348e57600080fd5b82016101808185031215612fd357600080fd5b80356001600160a01b038116811461340b57600080fd5b600080604083850312156134cb57600080fd5b82356134d6816133eb565b91506134e4602084016134a1565b90509250929050565b6000602082840312156134ff57600080fd5b5035919050565b60006020828403121561351857600080fd5b81356001600160401b0381111561352e57600080fd5b82016101408185031215612fd357600080fd5b60008060006040848603121561355657600080fd5b8335613561816133eb565b925060208401356001600160401b038082111561357d57600080fd5b818601915086601f83011261359157600080fd5b8135818111156135a057600080fd5b8760208260061b85010111156135b557600080fd5b6020830194508093505050509250925092565b60008083601f8401126135da57600080fd5b5081356001600160401b038111156135f157600080fd5b6020830191508360208285010111156130dd57600080fd5b6000806000806060858703121561361f57600080fd5b843561362a816133eb565b935060208501356001600160401b0381111561364557600080fd5b613651878288016135c8565b9094509250506040850135613665816133eb565b939692955090935050565b60006020828403121561368257600080fd5b612fd3826134a1565b60006020828403121561369d57600080fd5b813561ffff81168114612fd357600080fd5b803560ff8116811461340b57600080fd5b60008060008060008060a087890312156136d957600080fd5b86356136e4816133eb565b95506136f2602088016136af565b9450613700604088016134a1565b935060608701356001600160401b0381111561371b57600080fd5b61372789828a016135c8565b909450925050608087013561373b816133eb565b809150509295509295509295565b6000808335601e1984360301811261376057600080fd5b8301803591506001600160401b0382111561377a57600080fd5b6020019150600681901b36038213156130dd57600080fd5b6000808335601e198436030181126137a957600080fd5b8301803591506001600160401b038211156137c357600080fd5b6020019150600581901b36038213156130dd57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613813576138136137db565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613841576138416137db565b604052919050565b60006080828403121561385b57600080fd5b604051608081018181106001600160401b038211171561387d5761387d6137db565b604052823561388b816133eb565b8152613899602084016136af565b602082015260408301356138ac816133eb565b60408201526060928301359281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b6000823560fe198336030181126138f057600080fd5b9190910192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b038087168352606060208401526139476060840186886138fa565b915080841660408401525095945050505050565b60006020828403121561396d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156139aa576139aa613974565b5092915050565b6001600160a01b0387811682528616602082015260a0604082018190526000906139de90830186886138fa565b6001600160401b039490941660608301525060800152949350505050565b60008235603e198336030181126138f057600080fd5b60008135612a02816133eb565b600160401b821115613a3357613a336137db565b8054828255808310156110b95760008260005260206000206003850160021c81016003840160021c8201915060188660031b168015613a83576000198083018054828460200360031b1c16815550505b505b81811015613a9857828155600101613a85565b505050505050565b8135613aab816133eb565b815467ffffffffffffffff19166001600160401b0391821617825560019081830160208581013536879003601e19018112613ae557600080fd5b8601803584811115613af657600080fd5b6020820194508060051b3603851315613b0e57600080fd5b613b188185613a1f565b60009384526020842093600282901c92505b82811015613b81576000805b6004811015613b7557613b68613b4b89613a12565b6001600160401b03908116600684901b90811b91901b1984161790565b9786019791508801613b36565b50858201558601613b2a565b506003198116808203818314613bbc576000805b82811015613bb657613ba9613b4b8a613a12565b9887019891508901613b95565b50868501555b50505050505050505050565b600060408284031215613bda57600080fd5b613be26137f1565b613beb836134a1565b81526020830135613bfb816133eb565b60208201529392505050565b6001600160401b038281168282160390808211156139aa576139aa613974565b81810381811115612a0257612a02613974565b600060408236031215613c4c57600080fd5b613c546137f1565b613c5d836134a1565b81526020808401356001600160401b0380821115613c7a57600080fd5b9085019036601f830112613c8d57600080fd5b813581811115613c9f57613c9f6137db565b613cb1601f8201601f19168501613819565b91508082523684828501011115613cc757600080fd5b80848401858401376000908201840152918301919091525092915050565b6000815180845260005b81811015613d0b57602081850181015186830182015201613cef565b506000602082860101526020601f19601f83011685010191505092915050565b8481526001600160a01b03841660208201528215156040820152608060608201819052600090613d5d90830184613ce5565b9695505050505050565b6000808335601e19843603018112613d7e57600080fd5b8301803591506001600160401b03821115613d9857600080fd5b6020019150368190038213156130dd57600080fd5b6001600160401b03818116838216028082169190828114613dd057613dd0613974565b505092915050565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680613e0857613e08613dd8565b92169190910492915050565b6000808335601e19843603018112613e2b57600080fd5b83016020810192503590506001600160401b03811115613e4a57600080fd5b8036038213156130dd57600080fd5b6020815260008235613e6a816133eb565b6001600160401b038116602084015250613e8660208401613400565b6001600160401b038116604084015250613ea260408401613400565b6001600160401b038116606084015250613ebe60608401613400565b6001600160401b038116608084015250613eda608084016134a1565b6001600160a01b03811660a084015250613ef660a084016134a1565b6001600160a01b03811660c084015250613f1360c0840184613e14565b6101008060e0860152613f2b610120860183856138fa565b9250613f3960e08701613400565b6001600160401b03169401939093529392505050565b80820180821115612a0257612a02613974565b600060018201613f7457613f74613974565b5060010190565b600060208284031215613f8d57600080fd5b81358015158114612fd357600080fd5b608081018235613fac816133eb565b6001600160401b03808216845260ff613fc7602087016136af565b16602085015260408501359150613fdd826133eb565b166040830152606092830135929091019190915290565b60008261400357614003613dd8565b500490565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208a9471d10275f6b1014b777c7883e3880e2b6d78a8324a3fcae8825677fa3b5264736f6c63430008180033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ActionXCall\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ActionXSubmit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"KeyPauseAll\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XSubQuorumDenominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XSubQuorumNumerator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"XSubValsetCutoff\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addValidatorSet\",\"inputs\":[{\"name\":\"valSetId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"validators\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Validator[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"power\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"chainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"collectFees\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"feeFor\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"feeOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inXBlockOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inXMsgOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"p\",\"type\":\"tuple\",\"internalType\":\"structOmniPortal.InitParams\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"feeOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"omniChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"omniCChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"xmsgMaxGasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"xmsgMinGasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"xmsgMaxDataSize\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"xreceiptMaxErrorSize\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"cChainXMsgOffset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"cChainXBlockOffset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"valSetId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"validators\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Validator[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"power\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isPaused\",\"inputs\":[{\"name\":\"actionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPaused\",\"inputs\":[{\"name\":\"actionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"chainId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPaused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedDest\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedShard\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isXCall\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestValSetId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"network\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omniCChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"omniChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"outXMsgOffset\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXCallTo\",\"inputs\":[{\"name\":\"chainId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXSubmit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXSubmitFrom\",\"inputs\":[{\"name\":\"chainId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeeOracle\",\"inputs\":[{\"name\":\"feeOracle_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setNetwork\",\"inputs\":[{\"name\":\"network_\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Chain[]\",\"components\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"shards\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXMsgMaxDataSize\",\"inputs\":[{\"name\":\"numBytes\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXMsgMaxGasLimit\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXMsgMinGasLimit\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setXReceiptMaxErrorSize\",\"inputs\":[{\"name\":\"numBytes\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXCallTo\",\"inputs\":[{\"name\":\"chainId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXSubmit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXSubmitFrom\",\"inputs\":[{\"name\":\"chainId_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valSet\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"valSetTotalPower\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xcall\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"conf\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"xmsg\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structXTypes.MsgShort\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xmsgMaxDataSize\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xmsgMaxGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xmsgMinGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xreceiptMaxErrorSize\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xsubmit\",\"inputs\":[{\"name\":\"xsub\",\"type\":\"tuple\",\"internalType\":\"structXTypes.Submission\",\"components\":[{\"name\":\"attestationRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorSetId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"blockHeader\",\"type\":\"tuple\",\"internalType\":\"structXTypes.BlockHeader\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"confLevel\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"offset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sourceBlockHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"msgs\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.Msg[]\",\"components\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"destChainId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"shardId\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"offset\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"proof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proofFlags\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"},{\"name\":\"signatures\",\"type\":\"tuple[]\",\"internalType\":\"structXTypes.SigTuple[]\",\"components\":[{\"name\":\"validatorAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"FeeOracleChanged\",\"inputs\":[{\"name\":\"oldOracle\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOrcale\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeesCollected\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorSetAdded\",\"inputs\":[{\"name\":\"setId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XCallPaused\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XCallToPaused\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XCallToUnpaused\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XCallUnpaused\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XMsg\",\"inputs\":[{\"name\":\"destChainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"shardId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"offset\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"fees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XMsgMaxDataSizeChanged\",\"inputs\":[{\"name\":\"oldMax\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"},{\"name\":\"newMax\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XMsgMaxGasLimitChanged\",\"inputs\":[{\"name\":\"oldMax\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"newMax\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XMsgMinGasLimitChanged\",\"inputs\":[{\"name\":\"oldMin\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"newMin\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XReceipt\",\"inputs\":[{\"name\":\"sourceChainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"shardId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"offset\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"gasUsed\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"relayer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"error\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XReceiptMaxErrorSizeChanged\",\"inputs\":[{\"name\":\"oldMax\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"},{\"name\":\"newMax\",\"type\":\"uint16\",\"indexed\":true,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XSubmitFromPaused\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XSubmitFromUnpaused\",\"inputs\":[{\"name\":\"chainId\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XSubmitPaused\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"XSubmitUnpaused\",\"inputs\":[],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6148b280620000f36000396000f3fe60806040526004361061031a5760003560e01c80638456cb59116101ab578063b2b2f5bd116100f7578063c2f9b96811610095578063d051c97d1161006f578063d051c97d14610a1a578063d533b44514610a5b578063f2fde38b14610a7b578063f45cc7b814610a9b57600080fd5b8063c2f9b968146109bd578063c3d8ad67146109dd578063cf84c818146109f257600080fd5b8063bb8590ad116100d1578063bb8590ad1461094f578063bff0e84d1461096f578063c21dda4f1461098f578063c26dfc05146109a257600080fd5b8063b2b2f5bd146108d9578063b4d5afd1146108fb578063b521466d1461092f57600080fd5b8063a32eb7c611610164578063aaf1bc971161013e578063aaf1bc971461083e578063afe821981461086e578063afe8af9c1461088e578063b187bd26146108c457600080fd5b8063a32eb7c6146107dc578063a480ca79146107fe578063a8a989621461081e57600080fd5b80638456cb59146107265780638532eb9f1461073b5780638da5cb5b1461075b5780638dd9523c146107795780639a8a0592146107a7578063a10ac97a146107ba57600080fd5b80633fd3b15e1161026a578063575420501161022357806374eba939116101fd57806374eba939146106aa57806378fe5307146106ca57806382b0084c146106f157806383d0cbd91461071157600080fd5b8063575420501461063f5780635832a41d14610680578063715018a61461069557600080fd5b80633fd3b15e14610551578063461ab488146105925780634a1ec0bd146105b2578063500b19e7146105d257806354d26bba1461060a57806355e2448e1461061f57600080fd5b8063241b71bb116102d757806336d21912116102b157806336d21912146104b457806336d853f9146104db5780633aa87330146104fb5780633f4ba83a1461053c57600080fd5b8063241b71bb146103ef57806324278bbe1461041f5780632f32700e1461044f57600080fd5b80630360d20f1461031f57806306c3dc5f1461034b57806310a5a7f714610360578063110ff5f1146103825780631d3eb6e3146103ba57806323dbce50146103da575b600080fd5b34801561032b57600080fd5b50610334600281565b60405160ff90911681526020015b60405180910390f35b34801561035757600080fd5b50610334600381565b34801561036c57600080fd5b5061038061037b366004613b45565b610ac2565b005b34801561038e57600080fd5b506098546103a2906001600160401b031681565b6040516001600160401b039091168152602001610342565b3480156103c657600080fd5b506103806103d5366004613b62565b610b21565b3480156103e657600080fd5b50610380610c3c565b3480156103fb57600080fd5b5061040f61040a366004613bd6565b610c86565b6040519015158152602001610342565b34801561042b57600080fd5b5061040f61043a366004613b45565b609c6020526000908152604090205460ff1681565b34801561045b57600080fd5b5060408051808201825260008082526020918201528151808301835260a2546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610342565b3480156104c057600080fd5b506098546103a290600160401b90046001600160401b031681565b3480156104e757600080fd5b506103806104f6366004613b45565b610c97565b34801561050757600080fd5b506103a2610516366004613bef565b609d6020908152600092835260408084209091529082529020546001600160401b031681565b34801561054857600080fd5b50610380610cab565b34801561055d57600080fd5b506103a261056c366004613bef565b609f6020908152600092835260408084209091529082529020546001600160401b031681565b34801561059e57600080fd5b5061040f6105ad366004613c28565b610ce6565b3480156105be57600080fd5b506103806105cd366004613c4d565b610d02565b3480156105de57600080fd5b506099546105f2906001600160a01b031681565b6040516001600160a01b039091168152602001610342565b34801561061657600080fd5b50610380611003565b34801561062b57600080fd5b5060a2546001600160401b0316151561040f565b34801561064b57600080fd5b506103a261065a366004613c9f565b60a16020908152600092835260408084209091529082529020546001600160401b031681565b34801561068c57600080fd5b50610334600a81565b3480156106a157600080fd5b5061038061104d565b3480156106b657600080fd5b506103a26106c5366004613bd6565b611061565b3480156106d657600080fd5b506097546103a290600160601b90046001600160401b031681565b3480156106fd57600080fd5b5061038061070c366004613cd4565b611090565b34801561071d57600080fd5b506103806113a3565b34801561073257600080fd5b506103806113ed565b34801561074757600080fd5b50610380610756366004613d0f565b611428565b34801561076757600080fd5b506033546001600160a01b03166105f2565b34801561078557600080fd5b50610799610794366004613dd7565b61153b565b604051908152602001610342565b3480156107b357600080fd5b50466103a2565b3480156107c657600080fd5b5061079960008051602061481d83398151915281565b3480156107e857600080fd5b5061079960008051602061485d83398151915281565b34801561080a57600080fd5b50610380610819366004613e3e565b6115bc565b34801561082a57600080fd5b50610380610839366004613e3e565b611644565b34801561084a57600080fd5b5061040f610859366004613b45565b609b6020526000908152604090205460ff1681565b34801561087a57600080fd5b50610380610889366004613b45565b611655565b34801561089a57600080fd5b506103a26108a9366004613b45565b60a0602052600090815260409020546001600160401b031681565b3480156108d057600080fd5b5061040f6116af565b3480156108e557600080fd5b506107996000805160206147fd83398151915281565b34801561090757600080fd5b5060975461091c9062010000900461ffff1681565b60405161ffff9091168152602001610342565b34801561093b57600080fd5b5061038061094a366004613e59565b611705565b34801561095b57600080fd5b5061038061096a366004613b45565b611716565b34801561097b57600080fd5b5061038061098a366004613e59565b611727565b61038061099d366004613e8e565b611738565b3480156109ae57600080fd5b5060975461091c9061ffff1681565b3480156109c957600080fd5b506103806109d8366004613b45565b611b10565b3480156109e957600080fd5b50610380611b6f565b3480156109fe57600080fd5b506097546103a29064010000000090046001600160401b031681565b348015610a2657600080fd5b506103a2610a35366004613bef565b609e6020908152600092835260408084209091529082529020546001600160401b031681565b348015610a6757600080fd5b50610380610a76366004613b45565b611bb9565b348015610a8757600080fd5b50610380610a96366004613e3e565b611c13565b348015610aa757600080fd5b506097546103a290600160a01b90046001600160401b031681565b610aca611c89565b610aea610ae56000805160206147fd83398151915283611ce3565b611d2c565b6040516001600160401b038216907fcd7910e1c5569d8433ce4ef8e5d51c1bdc03168f614b576da47dc3d2b51d033a90600090a250565b333014610b6d5760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b60448201526064015b60405180910390fd5b60985460a2546001600160401b03908116600160401b9092041614610bce5760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610b64565b60a254600160401b90046001600160a01b031615610c2e5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610b64565b610c388282611da7565b5050565b610c44611c89565b610c5b60008051602061485d833981519152611d2c565b6040517f3d0f9c56dac46156a2db0aa09ee7804770ad9fc9549d21023164f22d69475ed890600090a1565b6000610c9182611f21565b92915050565b610c9f611c89565b610ca881611f88565b50565b610cb3611c89565b610cbb612042565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6000610cfb83610cf68585611ce3565b612059565b9392505050565b600054610100900460ff1615808015610d225750600054600160ff909116105b80610d3c5750303b158015610d3c575060005460ff166001145b610d9f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b64565b6000805460ff191660011790558015610dc2576000805461ff0019166101001790555b610dd7610dd26020840184613e3e565b6120e0565b610def610dea6040840160208501613e3e565b612132565b610e07610e0260a0840160808501613b45565b611f88565b610e1f610e1a60c0840160a08501613b45565b6121da565b610e37610e3260e0840160c08501613e59565b612292565b610e50610e4b610100840160e08501613e59565b612338565b610e78610e6561016084016101408501613b45565b610e73610160850185613f17565b6123d4565b610e886060830160408401613b45565b6098805467ffffffffffffffff19166001600160401b0392909216919091179055610eb96080830160608401613b45565b609880546001600160401b0392909216600160401b026fffffffffffffffff000000000000000019909216919091179055610104610eff61012084016101008501613b45565b609e6000610f136080870160608801613b45565b6001600160401b0390811682526020808301939093526040918201600090812086831682529093529120805467ffffffffffffffff191692909116919091179055610f6661014084016101208501613b45565b609f6000610f7a6080870160608801613b45565b6001600160401b03908116825260208083019390935260409182016000908120958216815294909252909220805467ffffffffffffffff1916919092161790558015610c38576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b61100b611c89565b6110226000805160206147fd833981519152612705565b6040517f4c48c7b71557216a3192842746bdfc381f98d7536d9eb1c6764f3b45e679482790600090a1565b611055611c89565b61105f60006120e0565b565b609a818154811061107157600080fd5b60009182526020909120600290910201546001600160401b0316905081565b60008051602061485d8339815191526110af6060830160408401613b45565b6110bd82610cf68484611ce3565b156110ff5760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610b64565b611107612780565b36600061111760c0860186613f60565b909250905060408501600061112f8260208901613b45565b9050826111755760405162461bcd60e51b81526020600482015260146024820152734f6d6e69506f7274616c3a206e6f20786d73677360601b6044820152606401610b64565b6001600160401b03808216600090815260a06020526040902054166111dc5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a20756e6b6e6f776e2076616c2073657400000000006044820152606401610b64565b6111e46127d9565b6001600160401b0316816001600160401b031610156112455760405162461bcd60e51b815260206004820152601760248201527f4f6d6e69506f7274616c3a206f6c642076616c207365740000000000000000006044820152606401610b64565b61128987356112586101208a018a613f60565b6001600160401b03808616600090815260a16020908152604080832060a09092529091205490911660026003612827565b6112cd5760405162461bcd60e51b81526020600482015260156024820152744f6d6e69506f7274616c3a206e6f2071756f72756d60581b6044820152606401610b64565b6112f587358386866112e260e08d018d613f60565b6112f06101008f018f613f60565b612a49565b6113415760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a20696e76616c69642070726f6f66000000000000006044820152606401610b64565b60005b8381101561138f5761138761135e36859003850185614017565b86868481811061137057611370614092565b905060200281019061138291906140a8565b612ac4565b600101611344565b505050505061139e6001606555565b505050565b6113ab611c89565b6113c26000805160206147fd833981519152611d2c565b6040517f5f335a4032d4cfb6aca7835b0c2225f36d4d9eaa4ed43ee59ed537e02dff6b3990600090a1565b6113f5611c89565b6113fd61302a565b6040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b33301461146f5760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b6044820152606401610b64565b60985460a2546001600160401b03908116600160401b90920416146114d05760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610b64565b60a254600160401b90046001600160a01b0316156115305760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610b64565b61139e8383836123d4565b609954604051632376548f60e21b81526000916001600160a01b031690638dd9523c906115729088908890889088906004016140f1565b602060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b39190614129565b95945050505050565b6115c4611c89565b60405147906001600160a01b0383169082156108fc029083906000818181858888f193505050501580156115fc573d6000803e3d6000fd5b50816001600160a01b03167f9dc46f23cfb5ddcad0ae7ea2be38d47fec07bb9382ec7e564efc69e036dd66ce8260405161163891815260200190565b60405180910390a25050565b61164c611c89565b610ca881612132565b61165d611c89565b611678610ae560008051602061485d83398151915283611ce3565b6040516001600160401b038216907fab78810a0515df65f9f10bfbcb92d03d5df71d9fd3b9414e9ad831a5117d6daa90600090a250565b600061170060008051602061481d83398151915260005260008051602061483d8339815191526020527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1690565b905090565b61170d611c89565b610ca881612292565b61171e611c89565b610ca8816121da565b61172f611c89565b610ca881612338565b6000805160206147fd8339815191528661175682610cf68484611ce3565b156117985760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610b64565b6001600160401b0388166000908152609c602052604090205460ff166118005760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610b64565b6001600160a01b0386166118565760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c00000000006044820152606401610b64565b6097546001600160401b03640100000000909104811690841611156118bd5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610b64565b6097546001600160401b03600160601b909104811690841610156119235760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610b64565b60975462010000900461ffff1684111561197f5760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206461746120746f6f206c617267650000000000006044820152606401610b64565b60ff8088166000818152609b60205260409020549091166119e25760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642073686172640000006044820152606401610b64565b60006119f08a88888861153b565b905080341015611a425760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e7420666565000000006044820152606401610b64565b6001600160401b03808b166000908152609d60209081526040808320868516845290915281208054600193919291611a7c91859116614158565b82546101009290920a6001600160401b038181021990931691831602179091558b81166000818152609d602090815260408083208886168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90611afc9033908e908e908e908e908b9061417f565b60405180910390a450505050505050505050565b611b18611c89565b611b38611b3360008051602061485d83398151915283611ce3565b612705565b6040516001600160401b038216907fc551305d9bd408be4327b7f8aba28b04ccf6b6c76925392d195ecf9cc764294d90600090a250565b611b77611c89565b611b8e60008051602061485d833981519152612705565b6040517f2cb9d71d4c31860b70e9b707c69aa2f5953e03474f00cfcfff205c4745f8287590600090a1565b611bc1611c89565b611bdc611b336000805160206147fd83398151915283611ce3565b6040516001600160401b038216907f1ed9223556fb0971076c30172f1f00630efd313b6a05290a562aef95928e712590600090a250565b611c1b611c89565b6001600160a01b038116611c805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b64565b610ca8816120e0565b6033546001600160a01b0316331461105f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b64565b60008282604051602001611d0e92919091825260c01b6001600160c01b031916602082015260280190565b60405160208183030381529060405280519060200120905092915050565b600081815260008051602061483d833981519152602081905260409091205460ff1615611d8e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610b64565b600091825260205260409020805460ff19166001179055565b611daf613041565b3660005b82811015611f1b57838382818110611dcd57611dcd614092565b9050602002810190611ddf91906141ca565b609a805460018101825560009190915290925082906002027f44da158ba27f9252712a74ff6a55c5d531f69609f1f6e7f17c4443a8e2089be401611e23828261426e565b5050611e2c4690565b6001600160401b0316611e426020840184613b45565b6001600160401b031614611e90576001609c6000611e636020860186613b45565b6001600160401b031681526020810191909152604001600020805460ff1916911515919091179055611f13565b60005b611ea06020840184613f60565b9050811015611f11576001609b6000611ebc6020870187613f60565b85818110611ecc57611ecc614092565b9050602002016020810190611ee19190613b45565b6001600160401b031681526020810191909152604001600020805460ff1916911515919091179055600101611e93565b505b600101611db3565b50505050565b60008051602061481d833981519152600090815260008051602061483d83398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680610cfb5750600092835260205250604090205460ff1690565b6000816001600160401b031611611fe15760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782067617300000000006044820152606401610b64565b609780546001600160401b038381166401000000008181026bffffffffffffffff000000001985161790945560405193909204169182907f251f3ae1733d684e5cac178693d5377ceed13586692070e29ba70b0aa1f3fc2a90600090a35050565b61105f60008051602061481d833981519152612705565b60008051602061481d833981519152600090815260008051602061483d83398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806120bf575060008481526020829052604090205460ff165b806120d8575060008381526020829052604090205460ff165b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381166121885760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206665654f7261636c650000006044820152606401610b64565b609980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f2819896846ed9ab612eb19218fd845f8328f084c8706b9ec2c47eabd479037a290600090a35050565b6000816001600160401b0316116122335760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d696e2067617300000000006044820152606401610b64565b609780546001600160401b03838116600160601b81810267ffffffffffffffff60601b1985161790945560405193909204169182907f7f60dee945e48cd3b3dc543aa68ce448509f2d31dd910ae06a2dbddf939ed80e90600090a35050565b60008161ffff16116122e65760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610b64565b6097805461ffff8381166201000081810263ffff00001985161790945560405193909204169182907f1fa383c9f092bcdae4b6b15330b7c642f1df85e00b50114243023df76add2a0d90600090a35050565b60008161ffff161161238c5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610b64565b6097805461ffff83811661ffff19831681179093556040519116919082907f2576c5c6f7ebaa5b68f8f301ebc37b011c2769fdb448b7c6dc47d185f72c82d890600090a35050565b80806124225760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f2076616c696461746f7273000000000000006044820152606401610b64565b6001600160401b03808516600090815260a06020526040902054161561248a5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c207365740000006044820152606401610b64565b604080518082018252600080825260208083018290526001600160401b038816825260a19052918220825b84811015612662578686828181106124cf576124cf614092565b9050604002018036038101906124e59190614396565b80519093506001600160a01b031661253f5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f2076616c696461746f720000006044820152606401610b64565b600083602001516001600160401b03161161259c5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f207a65726f20706f776572000000000000006044820152606401610b64565b82516001600160a01b03166000908152602083905260409020546001600160401b03161561260c5760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c696461746f72006044820152606401610b64565b602083015161261b9085614158565b60208481015185516001600160a01b03166000908152918590526040909120805467ffffffffffffffff19166001600160401b0390921691909117905593506001016124b5565b506001600160401b03878116600081815260a060205260409020805467ffffffffffffffff1916868416179055609754600160a01b900490911610156126c8576097805467ffffffffffffffff60a01b1916600160a01b6001600160401b038a16021790555b6040516001600160401b038816907f3a7c2f997a87ba92aedaecd1127f4129cae1283e2809ebf5304d321b943fd10790600090a250505050505050565b600081815260008051602061483d833981519152602081905260409091205460ff1661276a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610b64565b600091825260205260409020805460ff19169055565b6002606554036127d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b64565b6002606555565b609754600090600a600160a01b9091046001600160401b0316116127fd5750600190565b60975461281c90600a90600160a01b90046001600160401b03166143d5565b611700906001614158565b6000803660005b88811015612a365789898281811061284857612848614092565b905060200281019061285a91906141ca565b9150801561297c5760008a8a6128716001856143f5565b81811061288057612880614092565b905060200281019061289291906141ca565b61289b90614408565b80519091506001600160a01b03166128b66020850185613e3e565b6001600160a01b03160361290c5760405162461bcd60e51b815260206004820152601b60248201527f51756f72756d3a206475706c69636174652076616c696461746f7200000000006044820152606401610b64565b80516001600160a01b03166129246020850185613e3e565b6001600160a01b03161161297a5760405162461bcd60e51b815260206004820152601760248201527f51756f72756d3a2073696773206e6f7420736f727465640000000000000000006044820152606401610b64565b505b612986828c613140565b6129d25760405162461bcd60e51b815260206004820152601960248201527f51756f72756d3a20696e76616c6964207369676e6174757265000000000000006044820152606401610b64565b8760006129e26020850185613e3e565b6001600160a01b03168152602081019190915260400160002054612a0f906001600160401b031684614158565b9250612a1d838888886131b4565b15612a2e5760019350505050612a3e565b60010161282e565b506000925050505b979650505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050612a8486868686612a7f8d8d6131f1565b6132bc565b81600081518110612a9757612a97614092565b602002602001018181525050612ab6818b612ab18c61357d565b613593565b9a9950505050505050505050565b6000612ad36020830183613b45565b90506000612ae76040840160208501613b45565b90506000612afb6060850160408601613b45565b90506000612b0f6080860160608701613b45565b905085600001516001600160401b0316846001600160401b031614612b765760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a2077726f6e6720736f7572636520636861696e00006044820152606401610b64565b466001600160401b0316836001600160401b03161480612b9d57506001600160401b038316155b612be95760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e67206465737420636861696e000000006044820152606401610b64565b6001600160401b038085166000908152609e602090815260408083208685168452909152902054612c1c91166001614158565b6001600160401b0316816001600160401b031614612c7c5760405162461bcd60e51b815260206004820152601860248201527f4f6d6e69506f7274616c3a2077726f6e67206f666673657400000000000000006044820152606401610b64565b856020015160ff16600460ff161480612c9e57508160ff16866020015160ff16145b612cea5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e6720636f6e66206c6576656c000000006044820152606401610b64565b6040808701516001600160401b038681166000908152609f602090815284822087841683529052929092205490821691161015612d64576040868101516001600160401b038681166000908152609f60209081528482208784168352905292909220805467ffffffffffffffff1916929091169190911790555b6001600160401b038085166000908152609e60209081526040808320868516845290915281208054600193919291612d9e91859116614158565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550306001600160a01b03168560a0016020810190612ddf9190613e3e565b6001600160a01b031603612eb957806001600160401b0316826001600160401b0316856001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b6000336000604051602401612e72906020808252601e908201527f4f6d6e69506f7274616c3a206e6f207863616c6c20746f20706f7274616c0000604082015260600190565b60408051601f198184030181529181526020820180516001600160e01b031662461bcd60e51b17905251612ea994939291906144f9565b60405180910390a4505050505050565b604080518082019091526001600160401b038516815260208101612ee360a0880160808901613e3e565b6001600160a01b03908116909152815160a28054602090940151909216600160401b026001600160e01b03199093166001600160401b03909116179190911790556000808080612f3960c08a0160a08b01613e3e565b6001600160a01b031614612f8b57612f86612f5a60c08a0160a08b01613e3e565b612f6b6101008b0160e08c01613b45565b6001600160401b0316612f8160c08c018c614535565b6135a9565b612fa0565b612fa0612f9b60c08a018a614535565b613669565b60a280546001600160e01b031916905591945092509050600083612fc45782612fd5565b604051806020016040528060008152505b9050846001600160401b0316866001600160401b0316896001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b85338987604051611afc94939291906144f9565b61105f60008051602061481d833981519152611d2c565b6000805b609a5481101561313357609a818154811061306257613062614092565b906000526020600020906002020191506130794690565b82546001600160401b039081169116146130b35781546001600160401b03166000908152609c60205260409020805460ff1916905561312b565b60005b6001830154811015613129576000609b60008560010184815481106130dd576130dd614092565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b031683528201929092526040019020805460ff19169115159190911790556001016130b6565b505b600101613045565b50610ca8609a6000613a9b565b600061314f6020840184613e3e565b6001600160a01b03166131a3836131696020870187614535565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506136ff92505050565b6001600160a01b0316149392505050565b60008160ff168360ff16856131c9919061457b565b6131d391906145bc565b6001600160401b0316856001600160401b0316119050949350505050565b60606000826001600160401b0381111561320d5761320d613fa9565b604051908082528060200260200182016040528015613236578160200160208202803683370190505b50905060005b838110156132b45761328f85858381811061325957613259614092565b905060200281019061326b91906140a8565b60405160200161327b9190614627565b60405160208183030381529060405261371b565b8282815181106132a1576132a1614092565b602090810291909101015260010161323c565b509392505050565b805160009085848060016132d0848661471d565b6132da91906143f5565b146133275760405162461bcd60e51b815260206004820152601f60248201527f4d65726b6c6550726f6f663a20696e76616c6964206d756c746970726f6f66006044820152606401610b64565b6000816001600160401b0381111561334157613341613fa9565b60405190808252806020026020018201604052801561336a578160200160208202803683370190505b5090506000806000805b858110156134b75760008885106133af57858461339081614730565b9550815181106133a2576133a2614092565b60200260200101516133d5565b8a856133ba81614730565b9650815181106133cc576133cc614092565b60200260200101515b905060008d8d848181106133eb576133eb614092565b90506020020160208101906134009190614749565b61342d578f8f8561341081614730565b965081811061342157613421614092565b90506020020135613484565b89861061345e57868561343f81614730565b96508151811061345157613451614092565b6020026020010151613484565b8b8661346981614730565b97508151811061347b5761347b614092565b60200260200101515b90506134908282613754565b8784815181106134a2576134a2614092565b60209081029190910101525050600101613374565b5084156135385785811461350d5760405162461bcd60e51b815260206004820152601f60248201527f4d65726b6c6550726f6f663a20696e76616c6964206d756c746970726f6f66006044820152606401610b64565b83600186038151811061352257613522614092565b60200260200101519750505050505050506115b3565b8615613551578860008151811061352257613522614092565b8c8c600081811061356457613564614092565b9050602002013597505050505050505095945050505050565b6000610c918260405160200161327b919061476b565b6000826135a08584613783565b14949350505050565b600060606000805a905060008061362d896000609760009054906101000a900461ffff168b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e6001600160a01b03166137be90949392919063ffffffff16565b9150915060005a9050613641603f8b6147c2565b811161364957fe5b828261365583876143f5565b965096509650505050509450945094915050565b600060606000805a9050600080306001600160a01b031688886040516136909291906147d6565b6000604051808303816000865af19150503d80600081146136cd576040519150601f19603f3d011682016040523d82523d6000602084013e6136d2565b606091505b50915091505a6136e290846143f5565b9250816136f157805160208201fd5b909450925090509250925092565b600080600061370e8585613848565b915091506132b48161388d565b6000818051906020012060405160200161373791815260200190565b604051602081830303815290604052805190602001209050919050565b6000818310613770576000828152602084905260409020610cfb565b6000838152602083905260409020610cfb565b600081815b84518110156132b4576137b4828683815181106137a7576137a7614092565b6020026020010151613754565b9150600101613788565b6000606060008060008661ffff166001600160401b038111156137e3576137e3613fa9565b6040519080825280601f01601f19166020018201604052801561380d576020820181803683370190505b5090506000808751602089018b8e8ef191503d92508683111561382e578692505b828152826000602083013e90999098509650505050505050565b600080825160410361387e5760208301516040840151606085015160001a613872878285856139d7565b94509450505050613886565b506000905060025b9250929050565b60008160048111156138a1576138a16147e6565b036138a95750565b60018160048111156138bd576138bd6147e6565b0361390a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b64565b600281600481111561391e5761391e6147e6565b0361396b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b64565b600381600481111561397f5761397f6147e6565b03610ca85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b64565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613a0e5750600090506003613a92565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613a62573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613a8b57600060019250925050613a92565b9150600090505b94509492505050565b5080546000825560020290600052602060002090810190610ca891905b80821115613ae757805467ffffffffffffffff191681556000613ade6001830182613aeb565b50600201613ab8565b5090565b508054600082556003016004900490600052602060002090810190610ca891905b80821115613ae75760008155600101613b0c565b6001600160401b0381168114610ca857600080fd5b8035613b4081613b20565b919050565b600060208284031215613b5757600080fd5b8135610cfb81613b20565b60008060208385031215613b7557600080fd5b82356001600160401b0380821115613b8c57600080fd5b818501915085601f830112613ba057600080fd5b813581811115613baf57600080fd5b8660208260051b8501011115613bc457600080fd5b60209290920196919550909350505050565b600060208284031215613be857600080fd5b5035919050565b60008060408385031215613c0257600080fd5b8235613c0d81613b20565b91506020830135613c1d81613b20565b809150509250929050565b60008060408385031215613c3b57600080fd5b823591506020830135613c1d81613b20565b600060208284031215613c5f57600080fd5b81356001600160401b03811115613c7557600080fd5b82016101808185031215610cfb57600080fd5b80356001600160a01b0381168114613b4057600080fd5b60008060408385031215613cb257600080fd5b8235613cbd81613b20565b9150613ccb60208401613c88565b90509250929050565b600060208284031215613ce657600080fd5b81356001600160401b03811115613cfc57600080fd5b82016101408185031215610cfb57600080fd5b600080600060408486031215613d2457600080fd5b8335613d2f81613b20565b925060208401356001600160401b0380821115613d4b57600080fd5b818601915086601f830112613d5f57600080fd5b813581811115613d6e57600080fd5b8760208260061b8501011115613d8357600080fd5b6020830194508093505050509250925092565b60008083601f840112613da857600080fd5b5081356001600160401b03811115613dbf57600080fd5b60208301915083602082850101111561388657600080fd5b60008060008060608587031215613ded57600080fd5b8435613df881613b20565b935060208501356001600160401b03811115613e1357600080fd5b613e1f87828801613d96565b9094509250506040850135613e3381613b20565b939692955090935050565b600060208284031215613e5057600080fd5b610cfb82613c88565b600060208284031215613e6b57600080fd5b813561ffff81168114610cfb57600080fd5b803560ff81168114613b4057600080fd5b60008060008060008060a08789031215613ea757600080fd5b8635613eb281613b20565b9550613ec060208801613e7d565b9450613ece60408801613c88565b935060608701356001600160401b03811115613ee957600080fd5b613ef589828a01613d96565b9094509250506080870135613f0981613b20565b809150509295509295509295565b6000808335601e19843603018112613f2e57600080fd5b8301803591506001600160401b03821115613f4857600080fd5b6020019150600681901b360382131561388657600080fd5b6000808335601e19843603018112613f7757600080fd5b8301803591506001600160401b03821115613f9157600080fd5b6020019150600581901b360382131561388657600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613fe157613fe1613fa9565b60405290565b604051601f8201601f191681016001600160401b038111828210171561400f5761400f613fa9565b604052919050565b60006080828403121561402957600080fd5b604051608081018181106001600160401b038211171561404b5761404b613fa9565b604052823561405981613b20565b815261406760208401613e7d565b6020820152604083013561407a81613b20565b60408201526060928301359281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b6000823560fe198336030181126140be57600080fd5b9190910192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b038087168352606060208401526141156060840186886140c8565b915080841660408401525095945050505050565b60006020828403121561413b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561417857614178614142565b5092915050565b6001600160a01b0387811682528616602082015260a0604082018190526000906141ac90830186886140c8565b6001600160401b039490941660608301525060800152949350505050565b60008235603e198336030181126140be57600080fd5b60008135610c9181613b20565b600160401b82111561420157614201613fa9565b80548282558083101561139e5760008260005260206000206003850160021c81016003840160021c8201915060188660031b168015614251576000198083018054828460200360031b1c16815550505b505b8181101561426657828155600101614253565b505050505050565b813561427981613b20565b815467ffffffffffffffff19166001600160401b0391821617825560019081830160208581013536879003601e190181126142b357600080fd5b86018035848111156142c457600080fd5b6020820194508060051b36038513156142dc57600080fd5b6142e681856141ed565b60009384526020842093600282901c92505b8281101561434f576000805b600481101561434357614336614319896141e0565b6001600160401b03908116600684901b90811b91901b1984161790565b9786019791508801614304565b508582015586016142f8565b50600319811680820381831461438a576000805b82811015614384576143776143198a6141e0565b9887019891508901614363565b50868501555b50505050505050505050565b6000604082840312156143a857600080fd5b6143b0613fbf565b6143b983613c88565b815260208301356143c981613b20565b60208201529392505050565b6001600160401b0382811682821603908082111561417857614178614142565b81810381811115610c9157610c91614142565b60006040823603121561441a57600080fd5b614422613fbf565b61442b83613c88565b81526020808401356001600160401b038082111561444857600080fd5b9085019036601f83011261445b57600080fd5b81358181111561446d5761446d613fa9565b61447f601f8201601f19168501613fe7565b9150808252368482850101111561449557600080fd5b80848401858401376000908201840152918301919091525092915050565b6000815180845260005b818110156144d9576020818501810151868301820152016144bd565b506000602082860101526020601f19601f83011685010191505092915050565b8481526001600160a01b0384166020820152821515604082015260806060820181905260009061452b908301846144b3565b9695505050505050565b6000808335601e1984360301811261454c57600080fd5b8301803591506001600160401b0382111561456657600080fd5b60200191503681900382131561388657600080fd5b6001600160401b0381811683821602808216919082811461459e5761459e614142565b505092915050565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b03808416806145d6576145d66145a6565b92169190910492915050565b6000808335601e198436030181126145f957600080fd5b83016020810192503590506001600160401b0381111561461857600080fd5b80360382131561388657600080fd5b602081526000823561463881613b20565b6001600160401b03811660208401525061465460208401613b35565b6001600160401b03811660408401525061467060408401613b35565b6001600160401b03811660608401525061468c60608401613b35565b6001600160401b0381166080840152506146a860808401613c88565b6001600160a01b03811660a0840152506146c460a08401613c88565b6001600160a01b03811660c0840152506146e160c08401846145e2565b6101008060e08601526146f9610120860183856140c8565b925061470760e08701613b35565b6001600160401b03169401939093529392505050565b80820180821115610c9157610c91614142565b60006001820161474257614742614142565b5060010190565b60006020828403121561475b57600080fd5b81358015158114610cfb57600080fd5b60808101823561477a81613b20565b6001600160401b03808216845260ff61479560208701613e7d565b166020850152604085013591506147ab82613b20565b166040830152606092830135929091019190915290565b6000826147d1576147d16145a6565b500490565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6876e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9ff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400feccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1ea2646970667358221220614e855a4eef3566f9bae045a391748a158546e06a8095247069e5fda78a498764736f6c63430008180033", } // OmniPortalABI is the input ABI used to generate the binding from. @@ -273,12 +273,105 @@ func (_OmniPortal *OmniPortalTransactorRaw) Transact(opts *bind.TransactOpts, me return _OmniPortal.Contract.contract.Transact(opts, method, params...) } -// XSUBQUORUMDENOMINATOR is a free data retrieval call binding the contract method 0x4f93e91f. +// ActionXCall is a free data retrieval call binding the contract method 0xb2b2f5bd. // -// Solidity: function XSUB_QUORUM_DENOMINATOR() view returns(uint8) -func (_OmniPortal *OmniPortalCaller) XSUBQUORUMDENOMINATOR(opts *bind.CallOpts) (uint8, error) { +// Solidity: function ActionXCall() view returns(bytes32) +func (_OmniPortal *OmniPortalCaller) ActionXCall(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _OmniPortal.contract.Call(opts, &out, "XSUB_QUORUM_DENOMINATOR") + err := _OmniPortal.contract.Call(opts, &out, "ActionXCall") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ActionXCall is a free data retrieval call binding the contract method 0xb2b2f5bd. +// +// Solidity: function ActionXCall() view returns(bytes32) +func (_OmniPortal *OmniPortalSession) ActionXCall() ([32]byte, error) { + return _OmniPortal.Contract.ActionXCall(&_OmniPortal.CallOpts) +} + +// ActionXCall is a free data retrieval call binding the contract method 0xb2b2f5bd. +// +// Solidity: function ActionXCall() view returns(bytes32) +func (_OmniPortal *OmniPortalCallerSession) ActionXCall() ([32]byte, error) { + return _OmniPortal.Contract.ActionXCall(&_OmniPortal.CallOpts) +} + +// ActionXSubmit is a free data retrieval call binding the contract method 0xa32eb7c6. +// +// Solidity: function ActionXSubmit() view returns(bytes32) +func (_OmniPortal *OmniPortalCaller) ActionXSubmit(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _OmniPortal.contract.Call(opts, &out, "ActionXSubmit") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ActionXSubmit is a free data retrieval call binding the contract method 0xa32eb7c6. +// +// Solidity: function ActionXSubmit() view returns(bytes32) +func (_OmniPortal *OmniPortalSession) ActionXSubmit() ([32]byte, error) { + return _OmniPortal.Contract.ActionXSubmit(&_OmniPortal.CallOpts) +} + +// ActionXSubmit is a free data retrieval call binding the contract method 0xa32eb7c6. +// +// Solidity: function ActionXSubmit() view returns(bytes32) +func (_OmniPortal *OmniPortalCallerSession) ActionXSubmit() ([32]byte, error) { + return _OmniPortal.Contract.ActionXSubmit(&_OmniPortal.CallOpts) +} + +// KeyPauseAll is a free data retrieval call binding the contract method 0xa10ac97a. +// +// Solidity: function KeyPauseAll() view returns(bytes32) +func (_OmniPortal *OmniPortalCaller) KeyPauseAll(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _OmniPortal.contract.Call(opts, &out, "KeyPauseAll") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// KeyPauseAll is a free data retrieval call binding the contract method 0xa10ac97a. +// +// Solidity: function KeyPauseAll() view returns(bytes32) +func (_OmniPortal *OmniPortalSession) KeyPauseAll() ([32]byte, error) { + return _OmniPortal.Contract.KeyPauseAll(&_OmniPortal.CallOpts) +} + +// KeyPauseAll is a free data retrieval call binding the contract method 0xa10ac97a. +// +// Solidity: function KeyPauseAll() view returns(bytes32) +func (_OmniPortal *OmniPortalCallerSession) KeyPauseAll() ([32]byte, error) { + return _OmniPortal.Contract.KeyPauseAll(&_OmniPortal.CallOpts) +} + +// XSubQuorumDenominator is a free data retrieval call binding the contract method 0x06c3dc5f. +// +// Solidity: function XSubQuorumDenominator() view returns(uint8) +func (_OmniPortal *OmniPortalCaller) XSubQuorumDenominator(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _OmniPortal.contract.Call(opts, &out, "XSubQuorumDenominator") if err != nil { return *new(uint8), err @@ -290,26 +383,26 @@ func (_OmniPortal *OmniPortalCaller) XSUBQUORUMDENOMINATOR(opts *bind.CallOpts) } -// XSUBQUORUMDENOMINATOR is a free data retrieval call binding the contract method 0x4f93e91f. +// XSubQuorumDenominator is a free data retrieval call binding the contract method 0x06c3dc5f. // -// Solidity: function XSUB_QUORUM_DENOMINATOR() view returns(uint8) -func (_OmniPortal *OmniPortalSession) XSUBQUORUMDENOMINATOR() (uint8, error) { - return _OmniPortal.Contract.XSUBQUORUMDENOMINATOR(&_OmniPortal.CallOpts) +// Solidity: function XSubQuorumDenominator() view returns(uint8) +func (_OmniPortal *OmniPortalSession) XSubQuorumDenominator() (uint8, error) { + return _OmniPortal.Contract.XSubQuorumDenominator(&_OmniPortal.CallOpts) } -// XSUBQUORUMDENOMINATOR is a free data retrieval call binding the contract method 0x4f93e91f. +// XSubQuorumDenominator is a free data retrieval call binding the contract method 0x06c3dc5f. // -// Solidity: function XSUB_QUORUM_DENOMINATOR() view returns(uint8) -func (_OmniPortal *OmniPortalCallerSession) XSUBQUORUMDENOMINATOR() (uint8, error) { - return _OmniPortal.Contract.XSUBQUORUMDENOMINATOR(&_OmniPortal.CallOpts) +// Solidity: function XSubQuorumDenominator() view returns(uint8) +func (_OmniPortal *OmniPortalCallerSession) XSubQuorumDenominator() (uint8, error) { + return _OmniPortal.Contract.XSubQuorumDenominator(&_OmniPortal.CallOpts) } -// XSUBQUORUMNUMERATOR is a free data retrieval call binding the contract method 0xa6cfb978. +// XSubQuorumNumerator is a free data retrieval call binding the contract method 0x0360d20f. // -// Solidity: function XSUB_QUORUM_NUMERATOR() view returns(uint8) -func (_OmniPortal *OmniPortalCaller) XSUBQUORUMNUMERATOR(opts *bind.CallOpts) (uint8, error) { +// Solidity: function XSubQuorumNumerator() view returns(uint8) +func (_OmniPortal *OmniPortalCaller) XSubQuorumNumerator(opts *bind.CallOpts) (uint8, error) { var out []interface{} - err := _OmniPortal.contract.Call(opts, &out, "XSUB_QUORUM_NUMERATOR") + err := _OmniPortal.contract.Call(opts, &out, "XSubQuorumNumerator") if err != nil { return *new(uint8), err @@ -321,26 +414,26 @@ func (_OmniPortal *OmniPortalCaller) XSUBQUORUMNUMERATOR(opts *bind.CallOpts) (u } -// XSUBQUORUMNUMERATOR is a free data retrieval call binding the contract method 0xa6cfb978. +// XSubQuorumNumerator is a free data retrieval call binding the contract method 0x0360d20f. // -// Solidity: function XSUB_QUORUM_NUMERATOR() view returns(uint8) -func (_OmniPortal *OmniPortalSession) XSUBQUORUMNUMERATOR() (uint8, error) { - return _OmniPortal.Contract.XSUBQUORUMNUMERATOR(&_OmniPortal.CallOpts) +// Solidity: function XSubQuorumNumerator() view returns(uint8) +func (_OmniPortal *OmniPortalSession) XSubQuorumNumerator() (uint8, error) { + return _OmniPortal.Contract.XSubQuorumNumerator(&_OmniPortal.CallOpts) } -// XSUBQUORUMNUMERATOR is a free data retrieval call binding the contract method 0xa6cfb978. +// XSubQuorumNumerator is a free data retrieval call binding the contract method 0x0360d20f. // -// Solidity: function XSUB_QUORUM_NUMERATOR() view returns(uint8) -func (_OmniPortal *OmniPortalCallerSession) XSUBQUORUMNUMERATOR() (uint8, error) { - return _OmniPortal.Contract.XSUBQUORUMNUMERATOR(&_OmniPortal.CallOpts) +// Solidity: function XSubQuorumNumerator() view returns(uint8) +func (_OmniPortal *OmniPortalCallerSession) XSubQuorumNumerator() (uint8, error) { + return _OmniPortal.Contract.XSubQuorumNumerator(&_OmniPortal.CallOpts) } -// XSUBVALSETCUTOFF is a free data retrieval call binding the contract method 0x03f24536. +// XSubValsetCutoff is a free data retrieval call binding the contract method 0x5832a41d. // -// Solidity: function XSUB_VALSET_CUTOFF() view returns(uint8) -func (_OmniPortal *OmniPortalCaller) XSUBVALSETCUTOFF(opts *bind.CallOpts) (uint8, error) { +// Solidity: function XSubValsetCutoff() view returns(uint8) +func (_OmniPortal *OmniPortalCaller) XSubValsetCutoff(opts *bind.CallOpts) (uint8, error) { var out []interface{} - err := _OmniPortal.contract.Call(opts, &out, "XSUB_VALSET_CUTOFF") + err := _OmniPortal.contract.Call(opts, &out, "XSubValsetCutoff") if err != nil { return *new(uint8), err @@ -352,18 +445,18 @@ func (_OmniPortal *OmniPortalCaller) XSUBVALSETCUTOFF(opts *bind.CallOpts) (uint } -// XSUBVALSETCUTOFF is a free data retrieval call binding the contract method 0x03f24536. +// XSubValsetCutoff is a free data retrieval call binding the contract method 0x5832a41d. // -// Solidity: function XSUB_VALSET_CUTOFF() view returns(uint8) -func (_OmniPortal *OmniPortalSession) XSUBVALSETCUTOFF() (uint8, error) { - return _OmniPortal.Contract.XSUBVALSETCUTOFF(&_OmniPortal.CallOpts) +// Solidity: function XSubValsetCutoff() view returns(uint8) +func (_OmniPortal *OmniPortalSession) XSubValsetCutoff() (uint8, error) { + return _OmniPortal.Contract.XSubValsetCutoff(&_OmniPortal.CallOpts) } -// XSUBVALSETCUTOFF is a free data retrieval call binding the contract method 0x03f24536. +// XSubValsetCutoff is a free data retrieval call binding the contract method 0x5832a41d. // -// Solidity: function XSUB_VALSET_CUTOFF() view returns(uint8) -func (_OmniPortal *OmniPortalCallerSession) XSUBVALSETCUTOFF() (uint8, error) { - return _OmniPortal.Contract.XSUBVALSETCUTOFF(&_OmniPortal.CallOpts) +// Solidity: function XSubValsetCutoff() view returns(uint8) +func (_OmniPortal *OmniPortalCallerSession) XSubValsetCutoff() (uint8, error) { + return _OmniPortal.Contract.XSubValsetCutoff(&_OmniPortal.CallOpts) } // ChainId is a free data retrieval call binding the contract method 0x9a8a0592. @@ -521,6 +614,99 @@ func (_OmniPortal *OmniPortalCallerSession) InXMsgOffset(arg0 uint64, arg1 uint6 return _OmniPortal.Contract.InXMsgOffset(&_OmniPortal.CallOpts, arg0, arg1) } +// IsPaused is a free data retrieval call binding the contract method 0x241b71bb. +// +// Solidity: function isPaused(bytes32 actionId) view returns(bool) +func (_OmniPortal *OmniPortalCaller) IsPaused(opts *bind.CallOpts, actionId [32]byte) (bool, error) { + var out []interface{} + err := _OmniPortal.contract.Call(opts, &out, "isPaused", actionId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsPaused is a free data retrieval call binding the contract method 0x241b71bb. +// +// Solidity: function isPaused(bytes32 actionId) view returns(bool) +func (_OmniPortal *OmniPortalSession) IsPaused(actionId [32]byte) (bool, error) { + return _OmniPortal.Contract.IsPaused(&_OmniPortal.CallOpts, actionId) +} + +// IsPaused is a free data retrieval call binding the contract method 0x241b71bb. +// +// Solidity: function isPaused(bytes32 actionId) view returns(bool) +func (_OmniPortal *OmniPortalCallerSession) IsPaused(actionId [32]byte) (bool, error) { + return _OmniPortal.Contract.IsPaused(&_OmniPortal.CallOpts, actionId) +} + +// IsPaused0 is a free data retrieval call binding the contract method 0x461ab488. +// +// Solidity: function isPaused(bytes32 actionId, uint64 chainId_) view returns(bool) +func (_OmniPortal *OmniPortalCaller) IsPaused0(opts *bind.CallOpts, actionId [32]byte, chainId_ uint64) (bool, error) { + var out []interface{} + err := _OmniPortal.contract.Call(opts, &out, "isPaused0", actionId, chainId_) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsPaused0 is a free data retrieval call binding the contract method 0x461ab488. +// +// Solidity: function isPaused(bytes32 actionId, uint64 chainId_) view returns(bool) +func (_OmniPortal *OmniPortalSession) IsPaused0(actionId [32]byte, chainId_ uint64) (bool, error) { + return _OmniPortal.Contract.IsPaused0(&_OmniPortal.CallOpts, actionId, chainId_) +} + +// IsPaused0 is a free data retrieval call binding the contract method 0x461ab488. +// +// Solidity: function isPaused(bytes32 actionId, uint64 chainId_) view returns(bool) +func (_OmniPortal *OmniPortalCallerSession) IsPaused0(actionId [32]byte, chainId_ uint64) (bool, error) { + return _OmniPortal.Contract.IsPaused0(&_OmniPortal.CallOpts, actionId, chainId_) +} + +// IsPaused1 is a free data retrieval call binding the contract method 0xb187bd26. +// +// Solidity: function isPaused() view returns(bool) +func (_OmniPortal *OmniPortalCaller) IsPaused1(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _OmniPortal.contract.Call(opts, &out, "isPaused1") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsPaused1 is a free data retrieval call binding the contract method 0xb187bd26. +// +// Solidity: function isPaused() view returns(bool) +func (_OmniPortal *OmniPortalSession) IsPaused1() (bool, error) { + return _OmniPortal.Contract.IsPaused1(&_OmniPortal.CallOpts) +} + +// IsPaused1 is a free data retrieval call binding the contract method 0xb187bd26. +// +// Solidity: function isPaused() view returns(bool) +func (_OmniPortal *OmniPortalCallerSession) IsPaused1() (bool, error) { + return _OmniPortal.Contract.IsPaused1(&_OmniPortal.CallOpts) +} + // IsSupportedDest is a free data retrieval call binding the contract method 0x24278bbe. // // Solidity: function isSupportedDest(uint64 ) view returns(bool) @@ -800,37 +986,6 @@ func (_OmniPortal *OmniPortalCallerSession) Owner() (common.Address, error) { return _OmniPortal.Contract.Owner(&_OmniPortal.CallOpts) } -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_OmniPortal *OmniPortalCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _OmniPortal.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_OmniPortal *OmniPortalSession) Paused() (bool, error) { - return _OmniPortal.Contract.Paused(&_OmniPortal.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_OmniPortal *OmniPortalCallerSession) Paused() (bool, error) { - return _OmniPortal.Contract.Paused(&_OmniPortal.CallOpts) -} - // ValSet is a free data retrieval call binding the contract method 0x57542050. // // Solidity: function valSet(uint64 , address ) view returns(uint64) @@ -1132,6 +1287,90 @@ func (_OmniPortal *OmniPortalTransactorSession) Pause() (*types.Transaction, err return _OmniPortal.Contract.Pause(&_OmniPortal.TransactOpts) } +// PauseXCall is a paid mutator transaction binding the contract method 0x83d0cbd9. +// +// Solidity: function pauseXCall() returns() +func (_OmniPortal *OmniPortalTransactor) PauseXCall(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OmniPortal.contract.Transact(opts, "pauseXCall") +} + +// PauseXCall is a paid mutator transaction binding the contract method 0x83d0cbd9. +// +// Solidity: function pauseXCall() returns() +func (_OmniPortal *OmniPortalSession) PauseXCall() (*types.Transaction, error) { + return _OmniPortal.Contract.PauseXCall(&_OmniPortal.TransactOpts) +} + +// PauseXCall is a paid mutator transaction binding the contract method 0x83d0cbd9. +// +// Solidity: function pauseXCall() returns() +func (_OmniPortal *OmniPortalTransactorSession) PauseXCall() (*types.Transaction, error) { + return _OmniPortal.Contract.PauseXCall(&_OmniPortal.TransactOpts) +} + +// PauseXCallTo is a paid mutator transaction binding the contract method 0x10a5a7f7. +// +// Solidity: function pauseXCallTo(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalTransactor) PauseXCallTo(opts *bind.TransactOpts, chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.contract.Transact(opts, "pauseXCallTo", chainId_) +} + +// PauseXCallTo is a paid mutator transaction binding the contract method 0x10a5a7f7. +// +// Solidity: function pauseXCallTo(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalSession) PauseXCallTo(chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.Contract.PauseXCallTo(&_OmniPortal.TransactOpts, chainId_) +} + +// PauseXCallTo is a paid mutator transaction binding the contract method 0x10a5a7f7. +// +// Solidity: function pauseXCallTo(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalTransactorSession) PauseXCallTo(chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.Contract.PauseXCallTo(&_OmniPortal.TransactOpts, chainId_) +} + +// PauseXSubmit is a paid mutator transaction binding the contract method 0x23dbce50. +// +// Solidity: function pauseXSubmit() returns() +func (_OmniPortal *OmniPortalTransactor) PauseXSubmit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OmniPortal.contract.Transact(opts, "pauseXSubmit") +} + +// PauseXSubmit is a paid mutator transaction binding the contract method 0x23dbce50. +// +// Solidity: function pauseXSubmit() returns() +func (_OmniPortal *OmniPortalSession) PauseXSubmit() (*types.Transaction, error) { + return _OmniPortal.Contract.PauseXSubmit(&_OmniPortal.TransactOpts) +} + +// PauseXSubmit is a paid mutator transaction binding the contract method 0x23dbce50. +// +// Solidity: function pauseXSubmit() returns() +func (_OmniPortal *OmniPortalTransactorSession) PauseXSubmit() (*types.Transaction, error) { + return _OmniPortal.Contract.PauseXSubmit(&_OmniPortal.TransactOpts) +} + +// PauseXSubmitFrom is a paid mutator transaction binding the contract method 0xafe82198. +// +// Solidity: function pauseXSubmitFrom(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalTransactor) PauseXSubmitFrom(opts *bind.TransactOpts, chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.contract.Transact(opts, "pauseXSubmitFrom", chainId_) +} + +// PauseXSubmitFrom is a paid mutator transaction binding the contract method 0xafe82198. +// +// Solidity: function pauseXSubmitFrom(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalSession) PauseXSubmitFrom(chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.Contract.PauseXSubmitFrom(&_OmniPortal.TransactOpts, chainId_) +} + +// PauseXSubmitFrom is a paid mutator transaction binding the contract method 0xafe82198. +// +// Solidity: function pauseXSubmitFrom(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalTransactorSession) PauseXSubmitFrom(chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.Contract.PauseXSubmitFrom(&_OmniPortal.TransactOpts, chainId_) +} + // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // // Solidity: function renounceOwnership() returns() @@ -1321,6 +1560,90 @@ func (_OmniPortal *OmniPortalTransactorSession) Unpause() (*types.Transaction, e return _OmniPortal.Contract.Unpause(&_OmniPortal.TransactOpts) } +// UnpauseXCall is a paid mutator transaction binding the contract method 0x54d26bba. +// +// Solidity: function unpauseXCall() returns() +func (_OmniPortal *OmniPortalTransactor) UnpauseXCall(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OmniPortal.contract.Transact(opts, "unpauseXCall") +} + +// UnpauseXCall is a paid mutator transaction binding the contract method 0x54d26bba. +// +// Solidity: function unpauseXCall() returns() +func (_OmniPortal *OmniPortalSession) UnpauseXCall() (*types.Transaction, error) { + return _OmniPortal.Contract.UnpauseXCall(&_OmniPortal.TransactOpts) +} + +// UnpauseXCall is a paid mutator transaction binding the contract method 0x54d26bba. +// +// Solidity: function unpauseXCall() returns() +func (_OmniPortal *OmniPortalTransactorSession) UnpauseXCall() (*types.Transaction, error) { + return _OmniPortal.Contract.UnpauseXCall(&_OmniPortal.TransactOpts) +} + +// UnpauseXCallTo is a paid mutator transaction binding the contract method 0xd533b445. +// +// Solidity: function unpauseXCallTo(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalTransactor) UnpauseXCallTo(opts *bind.TransactOpts, chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.contract.Transact(opts, "unpauseXCallTo", chainId_) +} + +// UnpauseXCallTo is a paid mutator transaction binding the contract method 0xd533b445. +// +// Solidity: function unpauseXCallTo(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalSession) UnpauseXCallTo(chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.Contract.UnpauseXCallTo(&_OmniPortal.TransactOpts, chainId_) +} + +// UnpauseXCallTo is a paid mutator transaction binding the contract method 0xd533b445. +// +// Solidity: function unpauseXCallTo(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalTransactorSession) UnpauseXCallTo(chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.Contract.UnpauseXCallTo(&_OmniPortal.TransactOpts, chainId_) +} + +// UnpauseXSubmit is a paid mutator transaction binding the contract method 0xc3d8ad67. +// +// Solidity: function unpauseXSubmit() returns() +func (_OmniPortal *OmniPortalTransactor) UnpauseXSubmit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OmniPortal.contract.Transact(opts, "unpauseXSubmit") +} + +// UnpauseXSubmit is a paid mutator transaction binding the contract method 0xc3d8ad67. +// +// Solidity: function unpauseXSubmit() returns() +func (_OmniPortal *OmniPortalSession) UnpauseXSubmit() (*types.Transaction, error) { + return _OmniPortal.Contract.UnpauseXSubmit(&_OmniPortal.TransactOpts) +} + +// UnpauseXSubmit is a paid mutator transaction binding the contract method 0xc3d8ad67. +// +// Solidity: function unpauseXSubmit() returns() +func (_OmniPortal *OmniPortalTransactorSession) UnpauseXSubmit() (*types.Transaction, error) { + return _OmniPortal.Contract.UnpauseXSubmit(&_OmniPortal.TransactOpts) +} + +// UnpauseXSubmitFrom is a paid mutator transaction binding the contract method 0xc2f9b968. +// +// Solidity: function unpauseXSubmitFrom(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalTransactor) UnpauseXSubmitFrom(opts *bind.TransactOpts, chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.contract.Transact(opts, "unpauseXSubmitFrom", chainId_) +} + +// UnpauseXSubmitFrom is a paid mutator transaction binding the contract method 0xc2f9b968. +// +// Solidity: function unpauseXSubmitFrom(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalSession) UnpauseXSubmitFrom(chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.Contract.UnpauseXSubmitFrom(&_OmniPortal.TransactOpts, chainId_) +} + +// UnpauseXSubmitFrom is a paid mutator transaction binding the contract method 0xc2f9b968. +// +// Solidity: function unpauseXSubmitFrom(uint64 chainId_) returns() +func (_OmniPortal *OmniPortalTransactorSession) UnpauseXSubmitFrom(chainId_ uint64) (*types.Transaction, error) { + return _OmniPortal.Contract.UnpauseXSubmitFrom(&_OmniPortal.TransactOpts, chainId_) +} + // Xcall is a paid mutator transaction binding the contract method 0xc21dda4f. // // Solidity: function xcall(uint64 destChainId, uint8 conf, address to, bytes data, uint64 gasLimit) payable returns() @@ -2017,13 +2340,12 @@ func (it *OmniPortalPausedIterator) Close() error { // OmniPortalPaused represents a Paused event raised by the OmniPortal contract. type OmniPortalPaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos + Raw types.Log // Blockchain specific contextual infos } -// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// FilterPaused is a free log retrieval operation binding the contract event 0x9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752. // -// Solidity: event Paused(address account) +// Solidity: event Paused() func (_OmniPortal *OmniPortalFilterer) FilterPaused(opts *bind.FilterOpts) (*OmniPortalPausedIterator, error) { logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "Paused") @@ -2033,9 +2355,9 @@ func (_OmniPortal *OmniPortalFilterer) FilterPaused(opts *bind.FilterOpts) (*Omn return &OmniPortalPausedIterator{contract: _OmniPortal.contract, event: "Paused", logs: logs, sub: sub}, nil } -// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// WatchPaused is a free log subscription operation binding the contract event 0x9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752. // -// Solidity: event Paused(address account) +// Solidity: event Paused() func (_OmniPortal *OmniPortalFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *OmniPortalPaused) (event.Subscription, error) { logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "Paused") @@ -2070,9 +2392,9 @@ func (_OmniPortal *OmniPortalFilterer) WatchPaused(opts *bind.WatchOpts, sink ch }), nil } -// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// ParsePaused is a log parse operation binding the contract event 0x9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752. // -// Solidity: event Paused(address account) +// Solidity: event Paused() func (_OmniPortal *OmniPortalFilterer) ParsePaused(log types.Log) (*OmniPortalPaused, error) { event := new(OmniPortalPaused) if err := _OmniPortal.contract.UnpackLog(event, "Paused", log); err != nil { @@ -2151,13 +2473,12 @@ func (it *OmniPortalUnpausedIterator) Close() error { // OmniPortalUnpaused represents a Unpaused event raised by the OmniPortal contract. type OmniPortalUnpaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos + Raw types.Log // Blockchain specific contextual infos } -// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// FilterUnpaused is a free log retrieval operation binding the contract event 0xa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933. // -// Solidity: event Unpaused(address account) +// Solidity: event Unpaused() func (_OmniPortal *OmniPortalFilterer) FilterUnpaused(opts *bind.FilterOpts) (*OmniPortalUnpausedIterator, error) { logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "Unpaused") @@ -2167,9 +2488,9 @@ func (_OmniPortal *OmniPortalFilterer) FilterUnpaused(opts *bind.FilterOpts) (*O return &OmniPortalUnpausedIterator{contract: _OmniPortal.contract, event: "Unpaused", logs: logs, sub: sub}, nil } -// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// WatchUnpaused is a free log subscription operation binding the contract event 0xa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933. // -// Solidity: event Unpaused(address account) +// Solidity: event Unpaused() func (_OmniPortal *OmniPortalFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *OmniPortalUnpaused) (event.Subscription, error) { logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "Unpaused") @@ -2204,9 +2525,9 @@ func (_OmniPortal *OmniPortalFilterer) WatchUnpaused(opts *bind.WatchOpts, sink }), nil } -// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// ParseUnpaused is a log parse operation binding the contract event 0xa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933. // -// Solidity: event Unpaused(address account) +// Solidity: event Unpaused() func (_OmniPortal *OmniPortalFilterer) ParseUnpaused(log types.Log) (*OmniPortalUnpaused, error) { event := new(OmniPortalUnpaused) if err := _OmniPortal.contract.UnpackLog(event, "Unpaused", log); err != nil { @@ -2360,9 +2681,9 @@ func (_OmniPortal *OmniPortalFilterer) ParseValidatorSetAdded(log types.Log) (*O return event, nil } -// OmniPortalXMsgIterator is returned from FilterXMsg and is used to iterate over the raw logs and unpacked data for XMsg events raised by the OmniPortal contract. -type OmniPortalXMsgIterator struct { - Event *OmniPortalXMsg // Event containing the contract specifics and raw log +// OmniPortalXCallPausedIterator is returned from FilterXCallPaused and is used to iterate over the raw logs and unpacked data for XCallPaused events raised by the OmniPortal contract. +type OmniPortalXCallPausedIterator struct { + Event *OmniPortalXCallPaused // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2376,7 +2697,7 @@ type OmniPortalXMsgIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *OmniPortalXMsgIterator) Next() bool { +func (it *OmniPortalXCallPausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2385,7 +2706,7 @@ func (it *OmniPortalXMsgIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(OmniPortalXMsg) + it.Event = new(OmniPortalXCallPaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2400,7 +2721,7 @@ func (it *OmniPortalXMsgIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(OmniPortalXMsg) + it.Event = new(OmniPortalXCallPaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2416,74 +2737,40 @@ func (it *OmniPortalXMsgIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *OmniPortalXMsgIterator) Error() error { +func (it *OmniPortalXCallPausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *OmniPortalXMsgIterator) Close() error { +func (it *OmniPortalXCallPausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// OmniPortalXMsg represents a XMsg event raised by the OmniPortal contract. -type OmniPortalXMsg struct { - DestChainId uint64 - ShardId uint64 - Offset uint64 - Sender common.Address - To common.Address - Data []byte - GasLimit uint64 - Fees *big.Int - Raw types.Log // Blockchain specific contextual infos +// OmniPortalXCallPaused represents a XCallPaused event raised by the OmniPortal contract. +type OmniPortalXCallPaused struct { + Raw types.Log // Blockchain specific contextual infos } -// FilterXMsg is a free log retrieval operation binding the contract event 0xb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa. +// FilterXCallPaused is a free log retrieval operation binding the contract event 0x5f335a4032d4cfb6aca7835b0c2225f36d4d9eaa4ed43ee59ed537e02dff6b39. // -// Solidity: event XMsg(uint64 indexed destChainId, uint64 indexed shardId, uint64 indexed offset, address sender, address to, bytes data, uint64 gasLimit, uint256 fees) -func (_OmniPortal *OmniPortalFilterer) FilterXMsg(opts *bind.FilterOpts, destChainId []uint64, shardId []uint64, offset []uint64) (*OmniPortalXMsgIterator, error) { - - var destChainIdRule []interface{} - for _, destChainIdItem := range destChainId { - destChainIdRule = append(destChainIdRule, destChainIdItem) - } - var shardIdRule []interface{} - for _, shardIdItem := range shardId { - shardIdRule = append(shardIdRule, shardIdItem) - } - var offsetRule []interface{} - for _, offsetItem := range offset { - offsetRule = append(offsetRule, offsetItem) - } +// Solidity: event XCallPaused() +func (_OmniPortal *OmniPortalFilterer) FilterXCallPaused(opts *bind.FilterOpts) (*OmniPortalXCallPausedIterator, error) { - logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XMsg", destChainIdRule, shardIdRule, offsetRule) + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XCallPaused") if err != nil { return nil, err } - return &OmniPortalXMsgIterator{contract: _OmniPortal.contract, event: "XMsg", logs: logs, sub: sub}, nil + return &OmniPortalXCallPausedIterator{contract: _OmniPortal.contract, event: "XCallPaused", logs: logs, sub: sub}, nil } -// WatchXMsg is a free log subscription operation binding the contract event 0xb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa. +// WatchXCallPaused is a free log subscription operation binding the contract event 0x5f335a4032d4cfb6aca7835b0c2225f36d4d9eaa4ed43ee59ed537e02dff6b39. // -// Solidity: event XMsg(uint64 indexed destChainId, uint64 indexed shardId, uint64 indexed offset, address sender, address to, bytes data, uint64 gasLimit, uint256 fees) -func (_OmniPortal *OmniPortalFilterer) WatchXMsg(opts *bind.WatchOpts, sink chan<- *OmniPortalXMsg, destChainId []uint64, shardId []uint64, offset []uint64) (event.Subscription, error) { - - var destChainIdRule []interface{} - for _, destChainIdItem := range destChainId { - destChainIdRule = append(destChainIdRule, destChainIdItem) - } - var shardIdRule []interface{} - for _, shardIdItem := range shardId { - shardIdRule = append(shardIdRule, shardIdItem) - } - var offsetRule []interface{} - for _, offsetItem := range offset { - offsetRule = append(offsetRule, offsetItem) - } +// Solidity: event XCallPaused() +func (_OmniPortal *OmniPortalFilterer) WatchXCallPaused(opts *bind.WatchOpts, sink chan<- *OmniPortalXCallPaused) (event.Subscription, error) { - logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XMsg", destChainIdRule, shardIdRule, offsetRule) + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XCallPaused") if err != nil { return nil, err } @@ -2493,8 +2780,8 @@ func (_OmniPortal *OmniPortalFilterer) WatchXMsg(opts *bind.WatchOpts, sink chan select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(OmniPortalXMsg) - if err := _OmniPortal.contract.UnpackLog(event, "XMsg", log); err != nil { + event := new(OmniPortalXCallPaused) + if err := _OmniPortal.contract.UnpackLog(event, "XCallPaused", log); err != nil { return err } event.Raw = log @@ -2515,21 +2802,21 @@ func (_OmniPortal *OmniPortalFilterer) WatchXMsg(opts *bind.WatchOpts, sink chan }), nil } -// ParseXMsg is a log parse operation binding the contract event 0xb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa. +// ParseXCallPaused is a log parse operation binding the contract event 0x5f335a4032d4cfb6aca7835b0c2225f36d4d9eaa4ed43ee59ed537e02dff6b39. // -// Solidity: event XMsg(uint64 indexed destChainId, uint64 indexed shardId, uint64 indexed offset, address sender, address to, bytes data, uint64 gasLimit, uint256 fees) -func (_OmniPortal *OmniPortalFilterer) ParseXMsg(log types.Log) (*OmniPortalXMsg, error) { - event := new(OmniPortalXMsg) - if err := _OmniPortal.contract.UnpackLog(event, "XMsg", log); err != nil { +// Solidity: event XCallPaused() +func (_OmniPortal *OmniPortalFilterer) ParseXCallPaused(log types.Log) (*OmniPortalXCallPaused, error) { + event := new(OmniPortalXCallPaused) + if err := _OmniPortal.contract.UnpackLog(event, "XCallPaused", log); err != nil { return nil, err } event.Raw = log return event, nil } -// OmniPortalXMsgMaxDataSizeChangedIterator is returned from FilterXMsgMaxDataSizeChanged and is used to iterate over the raw logs and unpacked data for XMsgMaxDataSizeChanged events raised by the OmniPortal contract. -type OmniPortalXMsgMaxDataSizeChangedIterator struct { - Event *OmniPortalXMsgMaxDataSizeChanged // Event containing the contract specifics and raw log +// OmniPortalXCallToPausedIterator is returned from FilterXCallToPaused and is used to iterate over the raw logs and unpacked data for XCallToPaused events raised by the OmniPortal contract. +type OmniPortalXCallToPausedIterator struct { + Event *OmniPortalXCallToPaused // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2543,7 +2830,7 @@ type OmniPortalXMsgMaxDataSizeChangedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *OmniPortalXMsgMaxDataSizeChangedIterator) Next() bool { +func (it *OmniPortalXCallToPausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2552,7 +2839,7 @@ func (it *OmniPortalXMsgMaxDataSizeChangedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(OmniPortalXMsgMaxDataSizeChanged) + it.Event = new(OmniPortalXCallToPaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2567,7 +2854,7 @@ func (it *OmniPortalXMsgMaxDataSizeChangedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(OmniPortalXMsgMaxDataSizeChanged) + it.Event = new(OmniPortalXCallToPaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2583,60 +2870,51 @@ func (it *OmniPortalXMsgMaxDataSizeChangedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *OmniPortalXMsgMaxDataSizeChangedIterator) Error() error { +func (it *OmniPortalXCallToPausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *OmniPortalXMsgMaxDataSizeChangedIterator) Close() error { +func (it *OmniPortalXCallToPausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// OmniPortalXMsgMaxDataSizeChanged represents a XMsgMaxDataSizeChanged event raised by the OmniPortal contract. -type OmniPortalXMsgMaxDataSizeChanged struct { - OldMax uint16 - NewMax uint16 - Raw types.Log // Blockchain specific contextual infos +// OmniPortalXCallToPaused represents a XCallToPaused event raised by the OmniPortal contract. +type OmniPortalXCallToPaused struct { + ChainId uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterXMsgMaxDataSizeChanged is a free log retrieval operation binding the contract event 0x1fa383c9f092bcdae4b6b15330b7c642f1df85e00b50114243023df76add2a0d. +// FilterXCallToPaused is a free log retrieval operation binding the contract event 0xcd7910e1c5569d8433ce4ef8e5d51c1bdc03168f614b576da47dc3d2b51d033a. // -// Solidity: event XMsgMaxDataSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) -func (_OmniPortal *OmniPortalFilterer) FilterXMsgMaxDataSizeChanged(opts *bind.FilterOpts, oldMax []uint16, newMax []uint16) (*OmniPortalXMsgMaxDataSizeChangedIterator, error) { +// Solidity: event XCallToPaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) FilterXCallToPaused(opts *bind.FilterOpts, chainId []uint64) (*OmniPortalXCallToPausedIterator, error) { - var oldMaxRule []interface{} - for _, oldMaxItem := range oldMax { - oldMaxRule = append(oldMaxRule, oldMaxItem) - } - var newMaxRule []interface{} - for _, newMaxItem := range newMax { - newMaxRule = append(newMaxRule, newMaxItem) + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) } - logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XMsgMaxDataSizeChanged", oldMaxRule, newMaxRule) + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XCallToPaused", chainIdRule) if err != nil { return nil, err } - return &OmniPortalXMsgMaxDataSizeChangedIterator{contract: _OmniPortal.contract, event: "XMsgMaxDataSizeChanged", logs: logs, sub: sub}, nil + return &OmniPortalXCallToPausedIterator{contract: _OmniPortal.contract, event: "XCallToPaused", logs: logs, sub: sub}, nil } -// WatchXMsgMaxDataSizeChanged is a free log subscription operation binding the contract event 0x1fa383c9f092bcdae4b6b15330b7c642f1df85e00b50114243023df76add2a0d. +// WatchXCallToPaused is a free log subscription operation binding the contract event 0xcd7910e1c5569d8433ce4ef8e5d51c1bdc03168f614b576da47dc3d2b51d033a. // -// Solidity: event XMsgMaxDataSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) -func (_OmniPortal *OmniPortalFilterer) WatchXMsgMaxDataSizeChanged(opts *bind.WatchOpts, sink chan<- *OmniPortalXMsgMaxDataSizeChanged, oldMax []uint16, newMax []uint16) (event.Subscription, error) { +// Solidity: event XCallToPaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) WatchXCallToPaused(opts *bind.WatchOpts, sink chan<- *OmniPortalXCallToPaused, chainId []uint64) (event.Subscription, error) { - var oldMaxRule []interface{} - for _, oldMaxItem := range oldMax { - oldMaxRule = append(oldMaxRule, oldMaxItem) - } - var newMaxRule []interface{} - for _, newMaxItem := range newMax { - newMaxRule = append(newMaxRule, newMaxItem) + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) } - logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XMsgMaxDataSizeChanged", oldMaxRule, newMaxRule) + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XCallToPaused", chainIdRule) if err != nil { return nil, err } @@ -2646,8 +2924,8 @@ func (_OmniPortal *OmniPortalFilterer) WatchXMsgMaxDataSizeChanged(opts *bind.Wa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(OmniPortalXMsgMaxDataSizeChanged) - if err := _OmniPortal.contract.UnpackLog(event, "XMsgMaxDataSizeChanged", log); err != nil { + event := new(OmniPortalXCallToPaused) + if err := _OmniPortal.contract.UnpackLog(event, "XCallToPaused", log); err != nil { return err } event.Raw = log @@ -2668,21 +2946,21 @@ func (_OmniPortal *OmniPortalFilterer) WatchXMsgMaxDataSizeChanged(opts *bind.Wa }), nil } -// ParseXMsgMaxDataSizeChanged is a log parse operation binding the contract event 0x1fa383c9f092bcdae4b6b15330b7c642f1df85e00b50114243023df76add2a0d. +// ParseXCallToPaused is a log parse operation binding the contract event 0xcd7910e1c5569d8433ce4ef8e5d51c1bdc03168f614b576da47dc3d2b51d033a. // -// Solidity: event XMsgMaxDataSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) -func (_OmniPortal *OmniPortalFilterer) ParseXMsgMaxDataSizeChanged(log types.Log) (*OmniPortalXMsgMaxDataSizeChanged, error) { - event := new(OmniPortalXMsgMaxDataSizeChanged) - if err := _OmniPortal.contract.UnpackLog(event, "XMsgMaxDataSizeChanged", log); err != nil { +// Solidity: event XCallToPaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) ParseXCallToPaused(log types.Log) (*OmniPortalXCallToPaused, error) { + event := new(OmniPortalXCallToPaused) + if err := _OmniPortal.contract.UnpackLog(event, "XCallToPaused", log); err != nil { return nil, err } event.Raw = log return event, nil } -// OmniPortalXMsgMaxGasLimitChangedIterator is returned from FilterXMsgMaxGasLimitChanged and is used to iterate over the raw logs and unpacked data for XMsgMaxGasLimitChanged events raised by the OmniPortal contract. -type OmniPortalXMsgMaxGasLimitChangedIterator struct { - Event *OmniPortalXMsgMaxGasLimitChanged // Event containing the contract specifics and raw log +// OmniPortalXCallToUnpausedIterator is returned from FilterXCallToUnpaused and is used to iterate over the raw logs and unpacked data for XCallToUnpaused events raised by the OmniPortal contract. +type OmniPortalXCallToUnpausedIterator struct { + Event *OmniPortalXCallToUnpaused // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2696,7 +2974,7 @@ type OmniPortalXMsgMaxGasLimitChangedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *OmniPortalXMsgMaxGasLimitChangedIterator) Next() bool { +func (it *OmniPortalXCallToUnpausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2705,7 +2983,7 @@ func (it *OmniPortalXMsgMaxGasLimitChangedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(OmniPortalXMsgMaxGasLimitChanged) + it.Event = new(OmniPortalXCallToUnpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2720,7 +2998,7 @@ func (it *OmniPortalXMsgMaxGasLimitChangedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(OmniPortalXMsgMaxGasLimitChanged) + it.Event = new(OmniPortalXCallToUnpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2736,60 +3014,51 @@ func (it *OmniPortalXMsgMaxGasLimitChangedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *OmniPortalXMsgMaxGasLimitChangedIterator) Error() error { +func (it *OmniPortalXCallToUnpausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *OmniPortalXMsgMaxGasLimitChangedIterator) Close() error { +func (it *OmniPortalXCallToUnpausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// OmniPortalXMsgMaxGasLimitChanged represents a XMsgMaxGasLimitChanged event raised by the OmniPortal contract. -type OmniPortalXMsgMaxGasLimitChanged struct { - OldMax uint64 - NewMax uint64 - Raw types.Log // Blockchain specific contextual infos +// OmniPortalXCallToUnpaused represents a XCallToUnpaused event raised by the OmniPortal contract. +type OmniPortalXCallToUnpaused struct { + ChainId uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterXMsgMaxGasLimitChanged is a free log retrieval operation binding the contract event 0x251f3ae1733d684e5cac178693d5377ceed13586692070e29ba70b0aa1f3fc2a. +// FilterXCallToUnpaused is a free log retrieval operation binding the contract event 0x1ed9223556fb0971076c30172f1f00630efd313b6a05290a562aef95928e7125. // -// Solidity: event XMsgMaxGasLimitChanged(uint64 indexed oldMax, uint64 indexed newMax) -func (_OmniPortal *OmniPortalFilterer) FilterXMsgMaxGasLimitChanged(opts *bind.FilterOpts, oldMax []uint64, newMax []uint64) (*OmniPortalXMsgMaxGasLimitChangedIterator, error) { +// Solidity: event XCallToUnpaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) FilterXCallToUnpaused(opts *bind.FilterOpts, chainId []uint64) (*OmniPortalXCallToUnpausedIterator, error) { - var oldMaxRule []interface{} - for _, oldMaxItem := range oldMax { - oldMaxRule = append(oldMaxRule, oldMaxItem) - } - var newMaxRule []interface{} - for _, newMaxItem := range newMax { - newMaxRule = append(newMaxRule, newMaxItem) + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) } - logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XMsgMaxGasLimitChanged", oldMaxRule, newMaxRule) + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XCallToUnpaused", chainIdRule) if err != nil { return nil, err } - return &OmniPortalXMsgMaxGasLimitChangedIterator{contract: _OmniPortal.contract, event: "XMsgMaxGasLimitChanged", logs: logs, sub: sub}, nil + return &OmniPortalXCallToUnpausedIterator{contract: _OmniPortal.contract, event: "XCallToUnpaused", logs: logs, sub: sub}, nil } -// WatchXMsgMaxGasLimitChanged is a free log subscription operation binding the contract event 0x251f3ae1733d684e5cac178693d5377ceed13586692070e29ba70b0aa1f3fc2a. +// WatchXCallToUnpaused is a free log subscription operation binding the contract event 0x1ed9223556fb0971076c30172f1f00630efd313b6a05290a562aef95928e7125. // -// Solidity: event XMsgMaxGasLimitChanged(uint64 indexed oldMax, uint64 indexed newMax) -func (_OmniPortal *OmniPortalFilterer) WatchXMsgMaxGasLimitChanged(opts *bind.WatchOpts, sink chan<- *OmniPortalXMsgMaxGasLimitChanged, oldMax []uint64, newMax []uint64) (event.Subscription, error) { +// Solidity: event XCallToUnpaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) WatchXCallToUnpaused(opts *bind.WatchOpts, sink chan<- *OmniPortalXCallToUnpaused, chainId []uint64) (event.Subscription, error) { - var oldMaxRule []interface{} - for _, oldMaxItem := range oldMax { - oldMaxRule = append(oldMaxRule, oldMaxItem) - } - var newMaxRule []interface{} - for _, newMaxItem := range newMax { - newMaxRule = append(newMaxRule, newMaxItem) + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) } - logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XMsgMaxGasLimitChanged", oldMaxRule, newMaxRule) + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XCallToUnpaused", chainIdRule) if err != nil { return nil, err } @@ -2799,8 +3068,8 @@ func (_OmniPortal *OmniPortalFilterer) WatchXMsgMaxGasLimitChanged(opts *bind.Wa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(OmniPortalXMsgMaxGasLimitChanged) - if err := _OmniPortal.contract.UnpackLog(event, "XMsgMaxGasLimitChanged", log); err != nil { + event := new(OmniPortalXCallToUnpaused) + if err := _OmniPortal.contract.UnpackLog(event, "XCallToUnpaused", log); err != nil { return err } event.Raw = log @@ -2821,21 +3090,21 @@ func (_OmniPortal *OmniPortalFilterer) WatchXMsgMaxGasLimitChanged(opts *bind.Wa }), nil } -// ParseXMsgMaxGasLimitChanged is a log parse operation binding the contract event 0x251f3ae1733d684e5cac178693d5377ceed13586692070e29ba70b0aa1f3fc2a. +// ParseXCallToUnpaused is a log parse operation binding the contract event 0x1ed9223556fb0971076c30172f1f00630efd313b6a05290a562aef95928e7125. // -// Solidity: event XMsgMaxGasLimitChanged(uint64 indexed oldMax, uint64 indexed newMax) -func (_OmniPortal *OmniPortalFilterer) ParseXMsgMaxGasLimitChanged(log types.Log) (*OmniPortalXMsgMaxGasLimitChanged, error) { - event := new(OmniPortalXMsgMaxGasLimitChanged) - if err := _OmniPortal.contract.UnpackLog(event, "XMsgMaxGasLimitChanged", log); err != nil { +// Solidity: event XCallToUnpaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) ParseXCallToUnpaused(log types.Log) (*OmniPortalXCallToUnpaused, error) { + event := new(OmniPortalXCallToUnpaused) + if err := _OmniPortal.contract.UnpackLog(event, "XCallToUnpaused", log); err != nil { return nil, err } event.Raw = log return event, nil } -// OmniPortalXMsgMinGasLimitChangedIterator is returned from FilterXMsgMinGasLimitChanged and is used to iterate over the raw logs and unpacked data for XMsgMinGasLimitChanged events raised by the OmniPortal contract. -type OmniPortalXMsgMinGasLimitChangedIterator struct { - Event *OmniPortalXMsgMinGasLimitChanged // Event containing the contract specifics and raw log +// OmniPortalXCallUnpausedIterator is returned from FilterXCallUnpaused and is used to iterate over the raw logs and unpacked data for XCallUnpaused events raised by the OmniPortal contract. +type OmniPortalXCallUnpausedIterator struct { + Event *OmniPortalXCallUnpaused // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2849,7 +3118,7 @@ type OmniPortalXMsgMinGasLimitChangedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *OmniPortalXMsgMinGasLimitChangedIterator) Next() bool { +func (it *OmniPortalXCallUnpausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2858,7 +3127,7 @@ func (it *OmniPortalXMsgMinGasLimitChangedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(OmniPortalXMsgMinGasLimitChanged) + it.Event = new(OmniPortalXCallUnpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2873,7 +3142,7 @@ func (it *OmniPortalXMsgMinGasLimitChangedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(OmniPortalXMsgMinGasLimitChanged) + it.Event = new(OmniPortalXCallUnpaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2889,60 +3158,40 @@ func (it *OmniPortalXMsgMinGasLimitChangedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *OmniPortalXMsgMinGasLimitChangedIterator) Error() error { +func (it *OmniPortalXCallUnpausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *OmniPortalXMsgMinGasLimitChangedIterator) Close() error { +func (it *OmniPortalXCallUnpausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// OmniPortalXMsgMinGasLimitChanged represents a XMsgMinGasLimitChanged event raised by the OmniPortal contract. -type OmniPortalXMsgMinGasLimitChanged struct { - OldMin uint64 - NewMin uint64 - Raw types.Log // Blockchain specific contextual infos +// OmniPortalXCallUnpaused represents a XCallUnpaused event raised by the OmniPortal contract. +type OmniPortalXCallUnpaused struct { + Raw types.Log // Blockchain specific contextual infos } -// FilterXMsgMinGasLimitChanged is a free log retrieval operation binding the contract event 0x7f60dee945e48cd3b3dc543aa68ce448509f2d31dd910ae06a2dbddf939ed80e. +// FilterXCallUnpaused is a free log retrieval operation binding the contract event 0x4c48c7b71557216a3192842746bdfc381f98d7536d9eb1c6764f3b45e6794827. // -// Solidity: event XMsgMinGasLimitChanged(uint64 indexed oldMin, uint64 indexed newMin) -func (_OmniPortal *OmniPortalFilterer) FilterXMsgMinGasLimitChanged(opts *bind.FilterOpts, oldMin []uint64, newMin []uint64) (*OmniPortalXMsgMinGasLimitChangedIterator, error) { +// Solidity: event XCallUnpaused() +func (_OmniPortal *OmniPortalFilterer) FilterXCallUnpaused(opts *bind.FilterOpts) (*OmniPortalXCallUnpausedIterator, error) { - var oldMinRule []interface{} - for _, oldMinItem := range oldMin { - oldMinRule = append(oldMinRule, oldMinItem) - } - var newMinRule []interface{} - for _, newMinItem := range newMin { - newMinRule = append(newMinRule, newMinItem) - } - - logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XMsgMinGasLimitChanged", oldMinRule, newMinRule) + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XCallUnpaused") if err != nil { return nil, err } - return &OmniPortalXMsgMinGasLimitChangedIterator{contract: _OmniPortal.contract, event: "XMsgMinGasLimitChanged", logs: logs, sub: sub}, nil + return &OmniPortalXCallUnpausedIterator{contract: _OmniPortal.contract, event: "XCallUnpaused", logs: logs, sub: sub}, nil } -// WatchXMsgMinGasLimitChanged is a free log subscription operation binding the contract event 0x7f60dee945e48cd3b3dc543aa68ce448509f2d31dd910ae06a2dbddf939ed80e. +// WatchXCallUnpaused is a free log subscription operation binding the contract event 0x4c48c7b71557216a3192842746bdfc381f98d7536d9eb1c6764f3b45e6794827. // -// Solidity: event XMsgMinGasLimitChanged(uint64 indexed oldMin, uint64 indexed newMin) -func (_OmniPortal *OmniPortalFilterer) WatchXMsgMinGasLimitChanged(opts *bind.WatchOpts, sink chan<- *OmniPortalXMsgMinGasLimitChanged, oldMin []uint64, newMin []uint64) (event.Subscription, error) { - - var oldMinRule []interface{} - for _, oldMinItem := range oldMin { - oldMinRule = append(oldMinRule, oldMinItem) - } - var newMinRule []interface{} - for _, newMinItem := range newMin { - newMinRule = append(newMinRule, newMinItem) - } +// Solidity: event XCallUnpaused() +func (_OmniPortal *OmniPortalFilterer) WatchXCallUnpaused(opts *bind.WatchOpts, sink chan<- *OmniPortalXCallUnpaused) (event.Subscription, error) { - logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XMsgMinGasLimitChanged", oldMinRule, newMinRule) + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XCallUnpaused") if err != nil { return nil, err } @@ -2952,8 +3201,8 @@ func (_OmniPortal *OmniPortalFilterer) WatchXMsgMinGasLimitChanged(opts *bind.Wa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(OmniPortalXMsgMinGasLimitChanged) - if err := _OmniPortal.contract.UnpackLog(event, "XMsgMinGasLimitChanged", log); err != nil { + event := new(OmniPortalXCallUnpaused) + if err := _OmniPortal.contract.UnpackLog(event, "XCallUnpaused", log); err != nil { return err } event.Raw = log @@ -2974,21 +3223,21 @@ func (_OmniPortal *OmniPortalFilterer) WatchXMsgMinGasLimitChanged(opts *bind.Wa }), nil } -// ParseXMsgMinGasLimitChanged is a log parse operation binding the contract event 0x7f60dee945e48cd3b3dc543aa68ce448509f2d31dd910ae06a2dbddf939ed80e. +// ParseXCallUnpaused is a log parse operation binding the contract event 0x4c48c7b71557216a3192842746bdfc381f98d7536d9eb1c6764f3b45e6794827. // -// Solidity: event XMsgMinGasLimitChanged(uint64 indexed oldMin, uint64 indexed newMin) -func (_OmniPortal *OmniPortalFilterer) ParseXMsgMinGasLimitChanged(log types.Log) (*OmniPortalXMsgMinGasLimitChanged, error) { - event := new(OmniPortalXMsgMinGasLimitChanged) - if err := _OmniPortal.contract.UnpackLog(event, "XMsgMinGasLimitChanged", log); err != nil { +// Solidity: event XCallUnpaused() +func (_OmniPortal *OmniPortalFilterer) ParseXCallUnpaused(log types.Log) (*OmniPortalXCallUnpaused, error) { + event := new(OmniPortalXCallUnpaused) + if err := _OmniPortal.contract.UnpackLog(event, "XCallUnpaused", log); err != nil { return nil, err } event.Raw = log return event, nil } -// OmniPortalXReceiptIterator is returned from FilterXReceipt and is used to iterate over the raw logs and unpacked data for XReceipt events raised by the OmniPortal contract. -type OmniPortalXReceiptIterator struct { - Event *OmniPortalXReceipt // Event containing the contract specifics and raw log +// OmniPortalXMsgIterator is returned from FilterXMsg and is used to iterate over the raw logs and unpacked data for XMsg events raised by the OmniPortal contract. +type OmniPortalXMsgIterator struct { + Event *OmniPortalXMsg // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3002,7 +3251,7 @@ type OmniPortalXReceiptIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *OmniPortalXReceiptIterator) Next() bool { +func (it *OmniPortalXMsgIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3011,7 +3260,7 @@ func (it *OmniPortalXReceiptIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(OmniPortalXReceipt) + it.Event = new(OmniPortalXMsg) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3026,7 +3275,7 @@ func (it *OmniPortalXReceiptIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(OmniPortalXReceipt) + it.Event = new(OmniPortalXMsg) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3042,37 +3291,38 @@ func (it *OmniPortalXReceiptIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *OmniPortalXReceiptIterator) Error() error { +func (it *OmniPortalXMsgIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *OmniPortalXReceiptIterator) Close() error { +func (it *OmniPortalXMsgIterator) Close() error { it.sub.Unsubscribe() return nil } -// OmniPortalXReceipt represents a XReceipt event raised by the OmniPortal contract. -type OmniPortalXReceipt struct { - SourceChainId uint64 - ShardId uint64 - Offset uint64 - GasUsed *big.Int - Relayer common.Address - Success bool - Error []byte - Raw types.Log // Blockchain specific contextual infos +// OmniPortalXMsg represents a XMsg event raised by the OmniPortal contract. +type OmniPortalXMsg struct { + DestChainId uint64 + ShardId uint64 + Offset uint64 + Sender common.Address + To common.Address + Data []byte + GasLimit uint64 + Fees *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterXReceipt is a free log retrieval operation binding the contract event 0x8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b. +// FilterXMsg is a free log retrieval operation binding the contract event 0xb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa. // -// Solidity: event XReceipt(uint64 indexed sourceChainId, uint64 indexed shardId, uint64 indexed offset, uint256 gasUsed, address relayer, bool success, bytes error) -func (_OmniPortal *OmniPortalFilterer) FilterXReceipt(opts *bind.FilterOpts, sourceChainId []uint64, shardId []uint64, offset []uint64) (*OmniPortalXReceiptIterator, error) { +// Solidity: event XMsg(uint64 indexed destChainId, uint64 indexed shardId, uint64 indexed offset, address sender, address to, bytes data, uint64 gasLimit, uint256 fees) +func (_OmniPortal *OmniPortalFilterer) FilterXMsg(opts *bind.FilterOpts, destChainId []uint64, shardId []uint64, offset []uint64) (*OmniPortalXMsgIterator, error) { - var sourceChainIdRule []interface{} - for _, sourceChainIdItem := range sourceChainId { - sourceChainIdRule = append(sourceChainIdRule, sourceChainIdItem) + var destChainIdRule []interface{} + for _, destChainIdItem := range destChainId { + destChainIdRule = append(destChainIdRule, destChainIdItem) } var shardIdRule []interface{} for _, shardIdItem := range shardId { @@ -3083,21 +3333,21 @@ func (_OmniPortal *OmniPortalFilterer) FilterXReceipt(opts *bind.FilterOpts, sou offsetRule = append(offsetRule, offsetItem) } - logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XReceipt", sourceChainIdRule, shardIdRule, offsetRule) + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XMsg", destChainIdRule, shardIdRule, offsetRule) if err != nil { return nil, err } - return &OmniPortalXReceiptIterator{contract: _OmniPortal.contract, event: "XReceipt", logs: logs, sub: sub}, nil + return &OmniPortalXMsgIterator{contract: _OmniPortal.contract, event: "XMsg", logs: logs, sub: sub}, nil } -// WatchXReceipt is a free log subscription operation binding the contract event 0x8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b. +// WatchXMsg is a free log subscription operation binding the contract event 0xb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa. // -// Solidity: event XReceipt(uint64 indexed sourceChainId, uint64 indexed shardId, uint64 indexed offset, uint256 gasUsed, address relayer, bool success, bytes error) -func (_OmniPortal *OmniPortalFilterer) WatchXReceipt(opts *bind.WatchOpts, sink chan<- *OmniPortalXReceipt, sourceChainId []uint64, shardId []uint64, offset []uint64) (event.Subscription, error) { +// Solidity: event XMsg(uint64 indexed destChainId, uint64 indexed shardId, uint64 indexed offset, address sender, address to, bytes data, uint64 gasLimit, uint256 fees) +func (_OmniPortal *OmniPortalFilterer) WatchXMsg(opts *bind.WatchOpts, sink chan<- *OmniPortalXMsg, destChainId []uint64, shardId []uint64, offset []uint64) (event.Subscription, error) { - var sourceChainIdRule []interface{} - for _, sourceChainIdItem := range sourceChainId { - sourceChainIdRule = append(sourceChainIdRule, sourceChainIdItem) + var destChainIdRule []interface{} + for _, destChainIdItem := range destChainId { + destChainIdRule = append(destChainIdRule, destChainIdItem) } var shardIdRule []interface{} for _, shardIdItem := range shardId { @@ -3108,7 +3358,7 @@ func (_OmniPortal *OmniPortalFilterer) WatchXReceipt(opts *bind.WatchOpts, sink offsetRule = append(offsetRule, offsetItem) } - logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XReceipt", sourceChainIdRule, shardIdRule, offsetRule) + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XMsg", destChainIdRule, shardIdRule, offsetRule) if err != nil { return nil, err } @@ -3118,8 +3368,8 @@ func (_OmniPortal *OmniPortalFilterer) WatchXReceipt(opts *bind.WatchOpts, sink select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(OmniPortalXReceipt) - if err := _OmniPortal.contract.UnpackLog(event, "XReceipt", log); err != nil { + event := new(OmniPortalXMsg) + if err := _OmniPortal.contract.UnpackLog(event, "XMsg", log); err != nil { return err } event.Raw = log @@ -3140,21 +3390,21 @@ func (_OmniPortal *OmniPortalFilterer) WatchXReceipt(opts *bind.WatchOpts, sink }), nil } -// ParseXReceipt is a log parse operation binding the contract event 0x8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b. +// ParseXMsg is a log parse operation binding the contract event 0xb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa. // -// Solidity: event XReceipt(uint64 indexed sourceChainId, uint64 indexed shardId, uint64 indexed offset, uint256 gasUsed, address relayer, bool success, bytes error) -func (_OmniPortal *OmniPortalFilterer) ParseXReceipt(log types.Log) (*OmniPortalXReceipt, error) { - event := new(OmniPortalXReceipt) - if err := _OmniPortal.contract.UnpackLog(event, "XReceipt", log); err != nil { +// Solidity: event XMsg(uint64 indexed destChainId, uint64 indexed shardId, uint64 indexed offset, address sender, address to, bytes data, uint64 gasLimit, uint256 fees) +func (_OmniPortal *OmniPortalFilterer) ParseXMsg(log types.Log) (*OmniPortalXMsg, error) { + event := new(OmniPortalXMsg) + if err := _OmniPortal.contract.UnpackLog(event, "XMsg", log); err != nil { return nil, err } event.Raw = log return event, nil } -// OmniPortalXReceiptMaxErrorSizeChangedIterator is returned from FilterXReceiptMaxErrorSizeChanged and is used to iterate over the raw logs and unpacked data for XReceiptMaxErrorSizeChanged events raised by the OmniPortal contract. -type OmniPortalXReceiptMaxErrorSizeChangedIterator struct { - Event *OmniPortalXReceiptMaxErrorSizeChanged // Event containing the contract specifics and raw log +// OmniPortalXMsgMaxDataSizeChangedIterator is returned from FilterXMsgMaxDataSizeChanged and is used to iterate over the raw logs and unpacked data for XMsgMaxDataSizeChanged events raised by the OmniPortal contract. +type OmniPortalXMsgMaxDataSizeChangedIterator struct { + Event *OmniPortalXMsgMaxDataSizeChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3168,7 +3418,7 @@ type OmniPortalXReceiptMaxErrorSizeChangedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *OmniPortalXReceiptMaxErrorSizeChangedIterator) Next() bool { +func (it *OmniPortalXMsgMaxDataSizeChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3177,7 +3427,7 @@ func (it *OmniPortalXReceiptMaxErrorSizeChangedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(OmniPortalXReceiptMaxErrorSizeChanged) + it.Event = new(OmniPortalXMsgMaxDataSizeChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3192,7 +3442,7 @@ func (it *OmniPortalXReceiptMaxErrorSizeChangedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(OmniPortalXReceiptMaxErrorSizeChanged) + it.Event = new(OmniPortalXMsgMaxDataSizeChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3208,28 +3458,28 @@ func (it *OmniPortalXReceiptMaxErrorSizeChangedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *OmniPortalXReceiptMaxErrorSizeChangedIterator) Error() error { +func (it *OmniPortalXMsgMaxDataSizeChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *OmniPortalXReceiptMaxErrorSizeChangedIterator) Close() error { +func (it *OmniPortalXMsgMaxDataSizeChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// OmniPortalXReceiptMaxErrorSizeChanged represents a XReceiptMaxErrorSizeChanged event raised by the OmniPortal contract. -type OmniPortalXReceiptMaxErrorSizeChanged struct { +// OmniPortalXMsgMaxDataSizeChanged represents a XMsgMaxDataSizeChanged event raised by the OmniPortal contract. +type OmniPortalXMsgMaxDataSizeChanged struct { OldMax uint16 NewMax uint16 Raw types.Log // Blockchain specific contextual infos } -// FilterXReceiptMaxErrorSizeChanged is a free log retrieval operation binding the contract event 0x2576c5c6f7ebaa5b68f8f301ebc37b011c2769fdb448b7c6dc47d185f72c82d8. +// FilterXMsgMaxDataSizeChanged is a free log retrieval operation binding the contract event 0x1fa383c9f092bcdae4b6b15330b7c642f1df85e00b50114243023df76add2a0d. // -// Solidity: event XReceiptMaxErrorSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) -func (_OmniPortal *OmniPortalFilterer) FilterXReceiptMaxErrorSizeChanged(opts *bind.FilterOpts, oldMax []uint16, newMax []uint16) (*OmniPortalXReceiptMaxErrorSizeChangedIterator, error) { +// Solidity: event XMsgMaxDataSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) +func (_OmniPortal *OmniPortalFilterer) FilterXMsgMaxDataSizeChanged(opts *bind.FilterOpts, oldMax []uint16, newMax []uint16) (*OmniPortalXMsgMaxDataSizeChangedIterator, error) { var oldMaxRule []interface{} for _, oldMaxItem := range oldMax { @@ -3240,17 +3490,17 @@ func (_OmniPortal *OmniPortalFilterer) FilterXReceiptMaxErrorSizeChanged(opts *b newMaxRule = append(newMaxRule, newMaxItem) } - logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XReceiptMaxErrorSizeChanged", oldMaxRule, newMaxRule) + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XMsgMaxDataSizeChanged", oldMaxRule, newMaxRule) if err != nil { return nil, err } - return &OmniPortalXReceiptMaxErrorSizeChangedIterator{contract: _OmniPortal.contract, event: "XReceiptMaxErrorSizeChanged", logs: logs, sub: sub}, nil + return &OmniPortalXMsgMaxDataSizeChangedIterator{contract: _OmniPortal.contract, event: "XMsgMaxDataSizeChanged", logs: logs, sub: sub}, nil } -// WatchXReceiptMaxErrorSizeChanged is a free log subscription operation binding the contract event 0x2576c5c6f7ebaa5b68f8f301ebc37b011c2769fdb448b7c6dc47d185f72c82d8. +// WatchXMsgMaxDataSizeChanged is a free log subscription operation binding the contract event 0x1fa383c9f092bcdae4b6b15330b7c642f1df85e00b50114243023df76add2a0d. // -// Solidity: event XReceiptMaxErrorSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) -func (_OmniPortal *OmniPortalFilterer) WatchXReceiptMaxErrorSizeChanged(opts *bind.WatchOpts, sink chan<- *OmniPortalXReceiptMaxErrorSizeChanged, oldMax []uint16, newMax []uint16) (event.Subscription, error) { +// Solidity: event XMsgMaxDataSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) +func (_OmniPortal *OmniPortalFilterer) WatchXMsgMaxDataSizeChanged(opts *bind.WatchOpts, sink chan<- *OmniPortalXMsgMaxDataSizeChanged, oldMax []uint16, newMax []uint16) (event.Subscription, error) { var oldMaxRule []interface{} for _, oldMaxItem := range oldMax { @@ -3261,7 +3511,7 @@ func (_OmniPortal *OmniPortalFilterer) WatchXReceiptMaxErrorSizeChanged(opts *bi newMaxRule = append(newMaxRule, newMaxItem) } - logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XReceiptMaxErrorSizeChanged", oldMaxRule, newMaxRule) + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XMsgMaxDataSizeChanged", oldMaxRule, newMaxRule) if err != nil { return nil, err } @@ -3271,8 +3521,8 @@ func (_OmniPortal *OmniPortalFilterer) WatchXReceiptMaxErrorSizeChanged(opts *bi select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(OmniPortalXReceiptMaxErrorSizeChanged) - if err := _OmniPortal.contract.UnpackLog(event, "XReceiptMaxErrorSizeChanged", log); err != nil { + event := new(OmniPortalXMsgMaxDataSizeChanged) + if err := _OmniPortal.contract.UnpackLog(event, "XMsgMaxDataSizeChanged", log); err != nil { return err } event.Raw = log @@ -3293,12 +3543,1191 @@ func (_OmniPortal *OmniPortalFilterer) WatchXReceiptMaxErrorSizeChanged(opts *bi }), nil } -// ParseXReceiptMaxErrorSizeChanged is a log parse operation binding the contract event 0x2576c5c6f7ebaa5b68f8f301ebc37b011c2769fdb448b7c6dc47d185f72c82d8. +// ParseXMsgMaxDataSizeChanged is a log parse operation binding the contract event 0x1fa383c9f092bcdae4b6b15330b7c642f1df85e00b50114243023df76add2a0d. // -// Solidity: event XReceiptMaxErrorSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) -func (_OmniPortal *OmniPortalFilterer) ParseXReceiptMaxErrorSizeChanged(log types.Log) (*OmniPortalXReceiptMaxErrorSizeChanged, error) { - event := new(OmniPortalXReceiptMaxErrorSizeChanged) - if err := _OmniPortal.contract.UnpackLog(event, "XReceiptMaxErrorSizeChanged", log); err != nil { +// Solidity: event XMsgMaxDataSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) +func (_OmniPortal *OmniPortalFilterer) ParseXMsgMaxDataSizeChanged(log types.Log) (*OmniPortalXMsgMaxDataSizeChanged, error) { + event := new(OmniPortalXMsgMaxDataSizeChanged) + if err := _OmniPortal.contract.UnpackLog(event, "XMsgMaxDataSizeChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniPortalXMsgMaxGasLimitChangedIterator is returned from FilterXMsgMaxGasLimitChanged and is used to iterate over the raw logs and unpacked data for XMsgMaxGasLimitChanged events raised by the OmniPortal contract. +type OmniPortalXMsgMaxGasLimitChangedIterator struct { + Event *OmniPortalXMsgMaxGasLimitChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniPortalXMsgMaxGasLimitChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniPortalXMsgMaxGasLimitChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniPortalXMsgMaxGasLimitChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniPortalXMsgMaxGasLimitChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniPortalXMsgMaxGasLimitChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniPortalXMsgMaxGasLimitChanged represents a XMsgMaxGasLimitChanged event raised by the OmniPortal contract. +type OmniPortalXMsgMaxGasLimitChanged struct { + OldMax uint64 + NewMax uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterXMsgMaxGasLimitChanged is a free log retrieval operation binding the contract event 0x251f3ae1733d684e5cac178693d5377ceed13586692070e29ba70b0aa1f3fc2a. +// +// Solidity: event XMsgMaxGasLimitChanged(uint64 indexed oldMax, uint64 indexed newMax) +func (_OmniPortal *OmniPortalFilterer) FilterXMsgMaxGasLimitChanged(opts *bind.FilterOpts, oldMax []uint64, newMax []uint64) (*OmniPortalXMsgMaxGasLimitChangedIterator, error) { + + var oldMaxRule []interface{} + for _, oldMaxItem := range oldMax { + oldMaxRule = append(oldMaxRule, oldMaxItem) + } + var newMaxRule []interface{} + for _, newMaxItem := range newMax { + newMaxRule = append(newMaxRule, newMaxItem) + } + + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XMsgMaxGasLimitChanged", oldMaxRule, newMaxRule) + if err != nil { + return nil, err + } + return &OmniPortalXMsgMaxGasLimitChangedIterator{contract: _OmniPortal.contract, event: "XMsgMaxGasLimitChanged", logs: logs, sub: sub}, nil +} + +// WatchXMsgMaxGasLimitChanged is a free log subscription operation binding the contract event 0x251f3ae1733d684e5cac178693d5377ceed13586692070e29ba70b0aa1f3fc2a. +// +// Solidity: event XMsgMaxGasLimitChanged(uint64 indexed oldMax, uint64 indexed newMax) +func (_OmniPortal *OmniPortalFilterer) WatchXMsgMaxGasLimitChanged(opts *bind.WatchOpts, sink chan<- *OmniPortalXMsgMaxGasLimitChanged, oldMax []uint64, newMax []uint64) (event.Subscription, error) { + + var oldMaxRule []interface{} + for _, oldMaxItem := range oldMax { + oldMaxRule = append(oldMaxRule, oldMaxItem) + } + var newMaxRule []interface{} + for _, newMaxItem := range newMax { + newMaxRule = append(newMaxRule, newMaxItem) + } + + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XMsgMaxGasLimitChanged", oldMaxRule, newMaxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniPortalXMsgMaxGasLimitChanged) + if err := _OmniPortal.contract.UnpackLog(event, "XMsgMaxGasLimitChanged", 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 +} + +// ParseXMsgMaxGasLimitChanged is a log parse operation binding the contract event 0x251f3ae1733d684e5cac178693d5377ceed13586692070e29ba70b0aa1f3fc2a. +// +// Solidity: event XMsgMaxGasLimitChanged(uint64 indexed oldMax, uint64 indexed newMax) +func (_OmniPortal *OmniPortalFilterer) ParseXMsgMaxGasLimitChanged(log types.Log) (*OmniPortalXMsgMaxGasLimitChanged, error) { + event := new(OmniPortalXMsgMaxGasLimitChanged) + if err := _OmniPortal.contract.UnpackLog(event, "XMsgMaxGasLimitChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniPortalXMsgMinGasLimitChangedIterator is returned from FilterXMsgMinGasLimitChanged and is used to iterate over the raw logs and unpacked data for XMsgMinGasLimitChanged events raised by the OmniPortal contract. +type OmniPortalXMsgMinGasLimitChangedIterator struct { + Event *OmniPortalXMsgMinGasLimitChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniPortalXMsgMinGasLimitChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniPortalXMsgMinGasLimitChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniPortalXMsgMinGasLimitChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniPortalXMsgMinGasLimitChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniPortalXMsgMinGasLimitChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniPortalXMsgMinGasLimitChanged represents a XMsgMinGasLimitChanged event raised by the OmniPortal contract. +type OmniPortalXMsgMinGasLimitChanged struct { + OldMin uint64 + NewMin uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterXMsgMinGasLimitChanged is a free log retrieval operation binding the contract event 0x7f60dee945e48cd3b3dc543aa68ce448509f2d31dd910ae06a2dbddf939ed80e. +// +// Solidity: event XMsgMinGasLimitChanged(uint64 indexed oldMin, uint64 indexed newMin) +func (_OmniPortal *OmniPortalFilterer) FilterXMsgMinGasLimitChanged(opts *bind.FilterOpts, oldMin []uint64, newMin []uint64) (*OmniPortalXMsgMinGasLimitChangedIterator, error) { + + var oldMinRule []interface{} + for _, oldMinItem := range oldMin { + oldMinRule = append(oldMinRule, oldMinItem) + } + var newMinRule []interface{} + for _, newMinItem := range newMin { + newMinRule = append(newMinRule, newMinItem) + } + + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XMsgMinGasLimitChanged", oldMinRule, newMinRule) + if err != nil { + return nil, err + } + return &OmniPortalXMsgMinGasLimitChangedIterator{contract: _OmniPortal.contract, event: "XMsgMinGasLimitChanged", logs: logs, sub: sub}, nil +} + +// WatchXMsgMinGasLimitChanged is a free log subscription operation binding the contract event 0x7f60dee945e48cd3b3dc543aa68ce448509f2d31dd910ae06a2dbddf939ed80e. +// +// Solidity: event XMsgMinGasLimitChanged(uint64 indexed oldMin, uint64 indexed newMin) +func (_OmniPortal *OmniPortalFilterer) WatchXMsgMinGasLimitChanged(opts *bind.WatchOpts, sink chan<- *OmniPortalXMsgMinGasLimitChanged, oldMin []uint64, newMin []uint64) (event.Subscription, error) { + + var oldMinRule []interface{} + for _, oldMinItem := range oldMin { + oldMinRule = append(oldMinRule, oldMinItem) + } + var newMinRule []interface{} + for _, newMinItem := range newMin { + newMinRule = append(newMinRule, newMinItem) + } + + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XMsgMinGasLimitChanged", oldMinRule, newMinRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniPortalXMsgMinGasLimitChanged) + if err := _OmniPortal.contract.UnpackLog(event, "XMsgMinGasLimitChanged", 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 +} + +// ParseXMsgMinGasLimitChanged is a log parse operation binding the contract event 0x7f60dee945e48cd3b3dc543aa68ce448509f2d31dd910ae06a2dbddf939ed80e. +// +// Solidity: event XMsgMinGasLimitChanged(uint64 indexed oldMin, uint64 indexed newMin) +func (_OmniPortal *OmniPortalFilterer) ParseXMsgMinGasLimitChanged(log types.Log) (*OmniPortalXMsgMinGasLimitChanged, error) { + event := new(OmniPortalXMsgMinGasLimitChanged) + if err := _OmniPortal.contract.UnpackLog(event, "XMsgMinGasLimitChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniPortalXReceiptIterator is returned from FilterXReceipt and is used to iterate over the raw logs and unpacked data for XReceipt events raised by the OmniPortal contract. +type OmniPortalXReceiptIterator struct { + Event *OmniPortalXReceipt // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniPortalXReceiptIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniPortalXReceipt) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniPortalXReceipt) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniPortalXReceiptIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniPortalXReceiptIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniPortalXReceipt represents a XReceipt event raised by the OmniPortal contract. +type OmniPortalXReceipt struct { + SourceChainId uint64 + ShardId uint64 + Offset uint64 + GasUsed *big.Int + Relayer common.Address + Success bool + Error []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterXReceipt is a free log retrieval operation binding the contract event 0x8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b. +// +// Solidity: event XReceipt(uint64 indexed sourceChainId, uint64 indexed shardId, uint64 indexed offset, uint256 gasUsed, address relayer, bool success, bytes error) +func (_OmniPortal *OmniPortalFilterer) FilterXReceipt(opts *bind.FilterOpts, sourceChainId []uint64, shardId []uint64, offset []uint64) (*OmniPortalXReceiptIterator, error) { + + var sourceChainIdRule []interface{} + for _, sourceChainIdItem := range sourceChainId { + sourceChainIdRule = append(sourceChainIdRule, sourceChainIdItem) + } + var shardIdRule []interface{} + for _, shardIdItem := range shardId { + shardIdRule = append(shardIdRule, shardIdItem) + } + var offsetRule []interface{} + for _, offsetItem := range offset { + offsetRule = append(offsetRule, offsetItem) + } + + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XReceipt", sourceChainIdRule, shardIdRule, offsetRule) + if err != nil { + return nil, err + } + return &OmniPortalXReceiptIterator{contract: _OmniPortal.contract, event: "XReceipt", logs: logs, sub: sub}, nil +} + +// WatchXReceipt is a free log subscription operation binding the contract event 0x8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b. +// +// Solidity: event XReceipt(uint64 indexed sourceChainId, uint64 indexed shardId, uint64 indexed offset, uint256 gasUsed, address relayer, bool success, bytes error) +func (_OmniPortal *OmniPortalFilterer) WatchXReceipt(opts *bind.WatchOpts, sink chan<- *OmniPortalXReceipt, sourceChainId []uint64, shardId []uint64, offset []uint64) (event.Subscription, error) { + + var sourceChainIdRule []interface{} + for _, sourceChainIdItem := range sourceChainId { + sourceChainIdRule = append(sourceChainIdRule, sourceChainIdItem) + } + var shardIdRule []interface{} + for _, shardIdItem := range shardId { + shardIdRule = append(shardIdRule, shardIdItem) + } + var offsetRule []interface{} + for _, offsetItem := range offset { + offsetRule = append(offsetRule, offsetItem) + } + + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XReceipt", sourceChainIdRule, shardIdRule, offsetRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniPortalXReceipt) + if err := _OmniPortal.contract.UnpackLog(event, "XReceipt", 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 +} + +// ParseXReceipt is a log parse operation binding the contract event 0x8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b. +// +// Solidity: event XReceipt(uint64 indexed sourceChainId, uint64 indexed shardId, uint64 indexed offset, uint256 gasUsed, address relayer, bool success, bytes error) +func (_OmniPortal *OmniPortalFilterer) ParseXReceipt(log types.Log) (*OmniPortalXReceipt, error) { + event := new(OmniPortalXReceipt) + if err := _OmniPortal.contract.UnpackLog(event, "XReceipt", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniPortalXReceiptMaxErrorSizeChangedIterator is returned from FilterXReceiptMaxErrorSizeChanged and is used to iterate over the raw logs and unpacked data for XReceiptMaxErrorSizeChanged events raised by the OmniPortal contract. +type OmniPortalXReceiptMaxErrorSizeChangedIterator struct { + Event *OmniPortalXReceiptMaxErrorSizeChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniPortalXReceiptMaxErrorSizeChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniPortalXReceiptMaxErrorSizeChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniPortalXReceiptMaxErrorSizeChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniPortalXReceiptMaxErrorSizeChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniPortalXReceiptMaxErrorSizeChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniPortalXReceiptMaxErrorSizeChanged represents a XReceiptMaxErrorSizeChanged event raised by the OmniPortal contract. +type OmniPortalXReceiptMaxErrorSizeChanged struct { + OldMax uint16 + NewMax uint16 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterXReceiptMaxErrorSizeChanged is a free log retrieval operation binding the contract event 0x2576c5c6f7ebaa5b68f8f301ebc37b011c2769fdb448b7c6dc47d185f72c82d8. +// +// Solidity: event XReceiptMaxErrorSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) +func (_OmniPortal *OmniPortalFilterer) FilterXReceiptMaxErrorSizeChanged(opts *bind.FilterOpts, oldMax []uint16, newMax []uint16) (*OmniPortalXReceiptMaxErrorSizeChangedIterator, error) { + + var oldMaxRule []interface{} + for _, oldMaxItem := range oldMax { + oldMaxRule = append(oldMaxRule, oldMaxItem) + } + var newMaxRule []interface{} + for _, newMaxItem := range newMax { + newMaxRule = append(newMaxRule, newMaxItem) + } + + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XReceiptMaxErrorSizeChanged", oldMaxRule, newMaxRule) + if err != nil { + return nil, err + } + return &OmniPortalXReceiptMaxErrorSizeChangedIterator{contract: _OmniPortal.contract, event: "XReceiptMaxErrorSizeChanged", logs: logs, sub: sub}, nil +} + +// WatchXReceiptMaxErrorSizeChanged is a free log subscription operation binding the contract event 0x2576c5c6f7ebaa5b68f8f301ebc37b011c2769fdb448b7c6dc47d185f72c82d8. +// +// Solidity: event XReceiptMaxErrorSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) +func (_OmniPortal *OmniPortalFilterer) WatchXReceiptMaxErrorSizeChanged(opts *bind.WatchOpts, sink chan<- *OmniPortalXReceiptMaxErrorSizeChanged, oldMax []uint16, newMax []uint16) (event.Subscription, error) { + + var oldMaxRule []interface{} + for _, oldMaxItem := range oldMax { + oldMaxRule = append(oldMaxRule, oldMaxItem) + } + var newMaxRule []interface{} + for _, newMaxItem := range newMax { + newMaxRule = append(newMaxRule, newMaxItem) + } + + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XReceiptMaxErrorSizeChanged", oldMaxRule, newMaxRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniPortalXReceiptMaxErrorSizeChanged) + if err := _OmniPortal.contract.UnpackLog(event, "XReceiptMaxErrorSizeChanged", 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 +} + +// ParseXReceiptMaxErrorSizeChanged is a log parse operation binding the contract event 0x2576c5c6f7ebaa5b68f8f301ebc37b011c2769fdb448b7c6dc47d185f72c82d8. +// +// Solidity: event XReceiptMaxErrorSizeChanged(uint16 indexed oldMax, uint16 indexed newMax) +func (_OmniPortal *OmniPortalFilterer) ParseXReceiptMaxErrorSizeChanged(log types.Log) (*OmniPortalXReceiptMaxErrorSizeChanged, error) { + event := new(OmniPortalXReceiptMaxErrorSizeChanged) + if err := _OmniPortal.contract.UnpackLog(event, "XReceiptMaxErrorSizeChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniPortalXSubmitFromPausedIterator is returned from FilterXSubmitFromPaused and is used to iterate over the raw logs and unpacked data for XSubmitFromPaused events raised by the OmniPortal contract. +type OmniPortalXSubmitFromPausedIterator struct { + Event *OmniPortalXSubmitFromPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniPortalXSubmitFromPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniPortalXSubmitFromPaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniPortalXSubmitFromPaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniPortalXSubmitFromPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniPortalXSubmitFromPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniPortalXSubmitFromPaused represents a XSubmitFromPaused event raised by the OmniPortal contract. +type OmniPortalXSubmitFromPaused struct { + ChainId uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterXSubmitFromPaused is a free log retrieval operation binding the contract event 0xab78810a0515df65f9f10bfbcb92d03d5df71d9fd3b9414e9ad831a5117d6daa. +// +// Solidity: event XSubmitFromPaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) FilterXSubmitFromPaused(opts *bind.FilterOpts, chainId []uint64) (*OmniPortalXSubmitFromPausedIterator, error) { + + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XSubmitFromPaused", chainIdRule) + if err != nil { + return nil, err + } + return &OmniPortalXSubmitFromPausedIterator{contract: _OmniPortal.contract, event: "XSubmitFromPaused", logs: logs, sub: sub}, nil +} + +// WatchXSubmitFromPaused is a free log subscription operation binding the contract event 0xab78810a0515df65f9f10bfbcb92d03d5df71d9fd3b9414e9ad831a5117d6daa. +// +// Solidity: event XSubmitFromPaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) WatchXSubmitFromPaused(opts *bind.WatchOpts, sink chan<- *OmniPortalXSubmitFromPaused, chainId []uint64) (event.Subscription, error) { + + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XSubmitFromPaused", chainIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniPortalXSubmitFromPaused) + if err := _OmniPortal.contract.UnpackLog(event, "XSubmitFromPaused", 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 +} + +// ParseXSubmitFromPaused is a log parse operation binding the contract event 0xab78810a0515df65f9f10bfbcb92d03d5df71d9fd3b9414e9ad831a5117d6daa. +// +// Solidity: event XSubmitFromPaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) ParseXSubmitFromPaused(log types.Log) (*OmniPortalXSubmitFromPaused, error) { + event := new(OmniPortalXSubmitFromPaused) + if err := _OmniPortal.contract.UnpackLog(event, "XSubmitFromPaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniPortalXSubmitFromUnpausedIterator is returned from FilterXSubmitFromUnpaused and is used to iterate over the raw logs and unpacked data for XSubmitFromUnpaused events raised by the OmniPortal contract. +type OmniPortalXSubmitFromUnpausedIterator struct { + Event *OmniPortalXSubmitFromUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniPortalXSubmitFromUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniPortalXSubmitFromUnpaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniPortalXSubmitFromUnpaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniPortalXSubmitFromUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniPortalXSubmitFromUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniPortalXSubmitFromUnpaused represents a XSubmitFromUnpaused event raised by the OmniPortal contract. +type OmniPortalXSubmitFromUnpaused struct { + ChainId uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterXSubmitFromUnpaused is a free log retrieval operation binding the contract event 0xc551305d9bd408be4327b7f8aba28b04ccf6b6c76925392d195ecf9cc764294d. +// +// Solidity: event XSubmitFromUnpaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) FilterXSubmitFromUnpaused(opts *bind.FilterOpts, chainId []uint64) (*OmniPortalXSubmitFromUnpausedIterator, error) { + + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XSubmitFromUnpaused", chainIdRule) + if err != nil { + return nil, err + } + return &OmniPortalXSubmitFromUnpausedIterator{contract: _OmniPortal.contract, event: "XSubmitFromUnpaused", logs: logs, sub: sub}, nil +} + +// WatchXSubmitFromUnpaused is a free log subscription operation binding the contract event 0xc551305d9bd408be4327b7f8aba28b04ccf6b6c76925392d195ecf9cc764294d. +// +// Solidity: event XSubmitFromUnpaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) WatchXSubmitFromUnpaused(opts *bind.WatchOpts, sink chan<- *OmniPortalXSubmitFromUnpaused, chainId []uint64) (event.Subscription, error) { + + var chainIdRule []interface{} + for _, chainIdItem := range chainId { + chainIdRule = append(chainIdRule, chainIdItem) + } + + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XSubmitFromUnpaused", chainIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniPortalXSubmitFromUnpaused) + if err := _OmniPortal.contract.UnpackLog(event, "XSubmitFromUnpaused", 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 +} + +// ParseXSubmitFromUnpaused is a log parse operation binding the contract event 0xc551305d9bd408be4327b7f8aba28b04ccf6b6c76925392d195ecf9cc764294d. +// +// Solidity: event XSubmitFromUnpaused(uint64 indexed chainId) +func (_OmniPortal *OmniPortalFilterer) ParseXSubmitFromUnpaused(log types.Log) (*OmniPortalXSubmitFromUnpaused, error) { + event := new(OmniPortalXSubmitFromUnpaused) + if err := _OmniPortal.contract.UnpackLog(event, "XSubmitFromUnpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniPortalXSubmitPausedIterator is returned from FilterXSubmitPaused and is used to iterate over the raw logs and unpacked data for XSubmitPaused events raised by the OmniPortal contract. +type OmniPortalXSubmitPausedIterator struct { + Event *OmniPortalXSubmitPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniPortalXSubmitPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniPortalXSubmitPaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniPortalXSubmitPaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniPortalXSubmitPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniPortalXSubmitPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniPortalXSubmitPaused represents a XSubmitPaused event raised by the OmniPortal contract. +type OmniPortalXSubmitPaused struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterXSubmitPaused is a free log retrieval operation binding the contract event 0x3d0f9c56dac46156a2db0aa09ee7804770ad9fc9549d21023164f22d69475ed8. +// +// Solidity: event XSubmitPaused() +func (_OmniPortal *OmniPortalFilterer) FilterXSubmitPaused(opts *bind.FilterOpts) (*OmniPortalXSubmitPausedIterator, error) { + + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XSubmitPaused") + if err != nil { + return nil, err + } + return &OmniPortalXSubmitPausedIterator{contract: _OmniPortal.contract, event: "XSubmitPaused", logs: logs, sub: sub}, nil +} + +// WatchXSubmitPaused is a free log subscription operation binding the contract event 0x3d0f9c56dac46156a2db0aa09ee7804770ad9fc9549d21023164f22d69475ed8. +// +// Solidity: event XSubmitPaused() +func (_OmniPortal *OmniPortalFilterer) WatchXSubmitPaused(opts *bind.WatchOpts, sink chan<- *OmniPortalXSubmitPaused) (event.Subscription, error) { + + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XSubmitPaused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniPortalXSubmitPaused) + if err := _OmniPortal.contract.UnpackLog(event, "XSubmitPaused", 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 +} + +// ParseXSubmitPaused is a log parse operation binding the contract event 0x3d0f9c56dac46156a2db0aa09ee7804770ad9fc9549d21023164f22d69475ed8. +// +// Solidity: event XSubmitPaused() +func (_OmniPortal *OmniPortalFilterer) ParseXSubmitPaused(log types.Log) (*OmniPortalXSubmitPaused, error) { + event := new(OmniPortalXSubmitPaused) + if err := _OmniPortal.contract.UnpackLog(event, "XSubmitPaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OmniPortalXSubmitUnpausedIterator is returned from FilterXSubmitUnpaused and is used to iterate over the raw logs and unpacked data for XSubmitUnpaused events raised by the OmniPortal contract. +type OmniPortalXSubmitUnpausedIterator struct { + Event *OmniPortalXSubmitUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OmniPortalXSubmitUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OmniPortalXSubmitUnpaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OmniPortalXSubmitUnpaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OmniPortalXSubmitUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OmniPortalXSubmitUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OmniPortalXSubmitUnpaused represents a XSubmitUnpaused event raised by the OmniPortal contract. +type OmniPortalXSubmitUnpaused struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterXSubmitUnpaused is a free log retrieval operation binding the contract event 0x2cb9d71d4c31860b70e9b707c69aa2f5953e03474f00cfcfff205c4745f82875. +// +// Solidity: event XSubmitUnpaused() +func (_OmniPortal *OmniPortalFilterer) FilterXSubmitUnpaused(opts *bind.FilterOpts) (*OmniPortalXSubmitUnpausedIterator, error) { + + logs, sub, err := _OmniPortal.contract.FilterLogs(opts, "XSubmitUnpaused") + if err != nil { + return nil, err + } + return &OmniPortalXSubmitUnpausedIterator{contract: _OmniPortal.contract, event: "XSubmitUnpaused", logs: logs, sub: sub}, nil +} + +// WatchXSubmitUnpaused is a free log subscription operation binding the contract event 0x2cb9d71d4c31860b70e9b707c69aa2f5953e03474f00cfcfff205c4745f82875. +// +// Solidity: event XSubmitUnpaused() +func (_OmniPortal *OmniPortalFilterer) WatchXSubmitUnpaused(opts *bind.WatchOpts, sink chan<- *OmniPortalXSubmitUnpaused) (event.Subscription, error) { + + logs, sub, err := _OmniPortal.contract.WatchLogs(opts, "XSubmitUnpaused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OmniPortalXSubmitUnpaused) + if err := _OmniPortal.contract.UnpackLog(event, "XSubmitUnpaused", 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 +} + +// ParseXSubmitUnpaused is a log parse operation binding the contract event 0x2cb9d71d4c31860b70e9b707c69aa2f5953e03474f00cfcfff205c4745f82875. +// +// Solidity: event XSubmitUnpaused() +func (_OmniPortal *OmniPortalFilterer) ParseXSubmitUnpaused(log types.Log) (*OmniPortalXSubmitUnpaused, error) { + event := new(OmniPortalXSubmitUnpaused) + if err := _OmniPortal.contract.UnpackLog(event, "XSubmitUnpaused", log); err != nil { return nil, err } event.Raw = log diff --git a/contracts/bindings/portalregistry_storage_layout.json b/contracts/bindings/portalregistry_storage_layout.json index fd8d90296..886e94b98 100644 --- a/contracts/bindings/portalregistry_storage_layout.json +++ b/contracts/bindings/portalregistry_storage_layout.json @@ -17,7 +17,7 @@ "type": "t_bool" }, { - "astId": 993, + "astId": 865, "contract": "src/xchain/PortalRegistry.sol:PortalRegistry", "label": "__gap", "offset": 0, @@ -41,7 +41,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 54738, + "astId": 52751, "contract": "src/xchain/PortalRegistry.sol:PortalRegistry", "label": "chainIds", "offset": 0, @@ -49,12 +49,12 @@ "type": "t_array(t_uint64)dyn_storage" }, { - "astId": 54744, + "astId": 52757, "contract": "src/xchain/PortalRegistry.sol:PortalRegistry", "label": "deployments", "offset": 0, "slot": "102", - "type": "t_mapping(t_uint64,t_struct(Deployment)54755_storage)" + "type": "t_mapping(t_uint64,t_struct(Deployment)52768_storage)" } ], "types": { @@ -86,20 +86,20 @@ "label": "bool", "numberOfBytes": "1" }, - "t_mapping(t_uint64,t_struct(Deployment)54755_storage)": { + "t_mapping(t_uint64,t_struct(Deployment)52768_storage)": { "encoding": "mapping", "key": "t_uint64", "label": "mapping(uint64 => struct PortalRegistry.Deployment)", "numberOfBytes": "32", - "value": "t_struct(Deployment)54755_storage" + "value": "t_struct(Deployment)52768_storage" }, - "t_struct(Deployment)54755_storage": { + "t_struct(Deployment)52768_storage": { "encoding": "inplace", "label": "struct PortalRegistry.Deployment", "numberOfBytes": "96", "members": [ { - "astId": 54747, + "astId": 52760, "contract": "src/xchain/PortalRegistry.sol:PortalRegistry", "label": "chainId", "offset": 0, @@ -107,7 +107,7 @@ "type": "t_uint64" }, { - "astId": 54749, + "astId": 52762, "contract": "src/xchain/PortalRegistry.sol:PortalRegistry", "label": "addr", "offset": 8, @@ -115,7 +115,7 @@ "type": "t_address" }, { - "astId": 54751, + "astId": 52764, "contract": "src/xchain/PortalRegistry.sol:PortalRegistry", "label": "deployHeight", "offset": 0, @@ -123,7 +123,7 @@ "type": "t_uint64" }, { - "astId": 54754, + "astId": 52767, "contract": "src/xchain/PortalRegistry.sol:PortalRegistry", "label": "shards", "offset": 0, diff --git a/contracts/bindings/proxyadmin_storage_layout.json b/contracts/bindings/proxyadmin_storage_layout.json index 4a8237751..bbcedf672 100644 --- a/contracts/bindings/proxyadmin_storage_layout.json +++ b/contracts/bindings/proxyadmin_storage_layout.json @@ -1,7 +1,7 @@ { "storage": [ { - "astId": 1002, + "astId": 874, "contract": "src/deploy/ProxyAdmin.sol:ProxyAdmin", "label": "_owner", "offset": 0, diff --git a/contracts/src/interfaces/IOmniPortalAdmin.sol b/contracts/src/interfaces/IOmniPortalAdmin.sol index 438565393..510a49ce8 100644 --- a/contracts/src/interfaces/IOmniPortalAdmin.sol +++ b/contracts/src/interfaces/IOmniPortalAdmin.sol @@ -48,6 +48,60 @@ interface IOmniPortalAdmin { */ event XReceiptMaxErrorSizeChanged(uint16 indexed oldMax, uint16 indexed newMax); + /** + * @notice Emitted the portal is paused, all xcalls and xsubmissions. + */ + event Paused(); + + /** + * @notice Emitted the portal is unpaused, all xcalls and xsubmissions. + */ + event Unpaused(); + + /** + * @notice Emitted when all xcalls are paused. + */ + event XCallPaused(); + + /** + * @notice Emitted when all xcalls are unpaused. + */ + event XCallUnpaused(); + + /** + * @notice Emitted when all xsubmissions are paused. + */ + event XSubmitPaused(); + + /** + * @notice Emitted when all xsubmissions are unpaused. + */ + event XSubmitUnpaused(); + + /** + * @notice Emitted when xcalls to a specific chain are paused. + * @param chainId The destination chain + */ + event XCallToPaused(uint64 indexed chainId); + + /** + * @notice Emitted when xcalls to a specific chain are unpaused. + * @param chainId The destination chain + */ + event XCallToUnpaused(uint64 indexed chainId); + + /** + * @notice Emitted when xsubmissions from a specific chain are paused. + * @param chainId The source chain + */ + event XSubmitFromPaused(uint64 indexed chainId); + + /** + * @notice Emitted when xsubmissions from a specific chain are unpaused. + * @param chainId The source chain + */ + event XSubmitFromUnpaused(uint64 indexed chainId); + /** * @notice Returns the current fee oracle address */ diff --git a/contracts/src/utils/Pausable.sol b/contracts/src/utils/Pausable.sol new file mode 100644 index 000000000..345a8f41b --- /dev/null +++ b/contracts/src/utils/Pausable.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity =0.8.24; + +/** + * @title Pausable + * @notice Contract module which provides a way to pause certain functions by key. + * @dev We use a map of bytes32 key to bools, rather than uint256 bitmap, to allow keys to be generated dynamically. + * This allows for flexible pausing, but at higher gas cost. + */ +contract PausableUpgradeable { + /// @custom:storage-location erc7201:omni.storage.Pauseable + struct PauseableStorage { + mapping(bytes32 => bool) _paused; + } + + // keccak256(abi.encode(uint256(keccak256("omni.storage.Pauseable")) - 1)) & ~bytes32(uint256(0xff)) + bytes32 private constant PausableStorageSlot = 0xff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400; + + function _getPauseableStorage() internal pure returns (PauseableStorage storage $) { + assembly { + $.slot := PausableStorageSlot + } + } + + /** + * @dev Special key for pausing all keys. + */ + bytes32 public constant KeyPauseAll = keccak256("PAUSE_ALL"); + + /** + * @notice Pause by key. + */ + function _pause(bytes32 key) internal { + PauseableStorage storage $ = _getPauseableStorage(); + require(!$._paused[key], "Pausable: paused"); + $._paused[key] = true; + } + + /** + * @notice Unpause by key. + */ + function _unpause(bytes32 key) internal { + PauseableStorage storage $ = _getPauseableStorage(); + require($._paused[key], "Pausable: not paused"); + $._paused[key] = false; + } + + /** + * @notice Returns true if `key` is paused, or all keys are paused. + */ + function _isPaused(bytes32 key) internal view returns (bool) { + PauseableStorage storage $ = _getPauseableStorage(); + return $._paused[KeyPauseAll] || $._paused[key]; + } + + /** + * @notice Returns true if either `key1` or `key2` is paused, or all keys are paused. + */ + function _isPaused(bytes32 key1, bytes32 key2) internal view returns (bool) { + PauseableStorage storage $ = _getPauseableStorage(); + return $._paused[KeyPauseAll] || $._paused[key1] || $._paused[key2]; + } + + /** + * @notice Returns true if all keys are paused. + */ + function _isAllPaused() internal view returns (bool) { + PauseableStorage storage $ = _getPauseableStorage(); + return $._paused[KeyPauseAll]; + } + + /** + * @notice Pause all keys. + */ + function _pauseAll() internal { + _pause(KeyPauseAll); + } + + /** + * @notice Unpause all keys. + */ + function _unpauseAll() internal { + _unpause(KeyPauseAll); + } +} diff --git a/contracts/src/xchain/OmniPortal.sol b/contracts/src/xchain/OmniPortal.sol index 1a2358e56..69597ca81 100644 --- a/contracts/src/xchain/OmniPortal.sol +++ b/contracts/src/xchain/OmniPortal.sol @@ -2,7 +2,6 @@ pragma solidity =0.8.24; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -import { PausableUpgradeable } from "@openzeppelin-upgrades/contracts/security/PausableUpgradeable.sol"; import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; import { ExcessivelySafeCall } from "@nomad-xyz/excessively-safe-call/src/ExcessivelySafeCall.sol"; @@ -14,6 +13,7 @@ import { XBlockMerkleProof } from "../libraries/XBlockMerkleProof.sol"; import { XTypes } from "../libraries/XTypes.sol"; import { Quorum } from "../libraries/Quorum.sol"; import { ConfLevel } from "../libraries/ConfLevel.sol"; +import { PausableUpgradeable } from "../utils/Pausable.sol"; import { OmniPortalConstants } from "./OmniPortalConstants.sol"; import { OmniPortalStorage } from "./OmniPortalStorage.sol"; @@ -30,6 +30,18 @@ contract OmniPortal is { using ExcessivelySafeCall for address; + /** + * @notice Modifier the requires an action is not paused. An action is paused if: + * - actionId is paused for all chains + * - actionId is paused for chainId + * - All actions are paused + * Available actions are ActionXCall and ActionXSubmit, defined in OmniPortalConstants.sol. + */ + modifier whenNotPaused(bytes32 actionId, uint64 chainId_) { + require(!_isPaused(actionId, _chainActionId(actionId, chainId_)), "OmniPortal: paused"); + _; + } + /** * @notice Construct the OmniPortal contract */ @@ -108,10 +120,10 @@ contract OmniPortal is function xcall(uint64 destChainId, uint8 conf, address to, bytes calldata data, uint64 gasLimit) external payable - whenNotPaused + whenNotPaused(ActionXCall, destChainId) { require(isSupportedDest[destChainId], "OmniPortal: unsupported dest"); - require(to != _VIRTUAL_PORTAL_ADDRESS, "OmniPortal: no portal xcall"); + require(to != VirtualPortalAddress, "OmniPortal: no portal xcall"); require(gasLimit <= xmsgMaxGasLimit, "OmniPortal: gasLimit too high"); require(gasLimit >= xmsgMinGasLimit, "OmniPortal: gasLimit too low"); require(data.length <= xmsgMaxDataSize, "OmniPortal: data too large"); @@ -148,7 +160,11 @@ contract OmniPortal is * @param xsub An xchain submission, including an attestation root w/ validator signatures, * and a block header and message batch, proven against the attestation root. */ - function xsubmit(XTypes.Submission calldata xsub) external whenNotPaused nonReentrant { + function xsubmit(XTypes.Submission calldata xsub) + external + whenNotPaused(ActionXSubmit, xsub.blockHeader.sourceChainId) + nonReentrant + { XTypes.Msg[] calldata xmsgs = xsub.msgs; XTypes.BlockHeader calldata xheader = xsub.blockHeader; uint64 valSetId = xsub.validatorSetId; @@ -164,8 +180,8 @@ contract OmniPortal is xsub.signatures, valSet[valSetId], valSetTotalPower[valSetId], - XSUB_QUORUM_NUMERATOR, - XSUB_QUORUM_DENOMINATOR + XSubQuorumNumerator, + XSubQuorumDenominator ), "OmniPortal: no quorum" ); @@ -212,7 +228,7 @@ contract OmniPortal is uint64 offset = xmsg_.offset; require(sourceChainId == xheader.sourceChainId, "OmniPortal: wrong source chain"); // TODO: we can remove xmsg sourceChainId, and instead just used xheader.sourceChainId - require(destChainId == chainId() || destChainId == _BROADCAST_CHAIN_ID, "OmniPortal: wrong dest chain"); + require(destChainId == chainId() || destChainId == BroadcastChainId, "OmniPortal: wrong dest chain"); require(offset == inXMsgOffset[sourceChainId][shardId] + 1, "OmniPortal: wrong offset"); // verify xmsg conf level matches xheader conf level @@ -247,7 +263,7 @@ contract OmniPortal is // set _xmsg to the one we're executing, allowing external contracts to query the current xmsg via xmsg() _xmsg = XTypes.MsgShort(sourceChainId, xmsg_.sender); - (bool success, bytes memory result, uint256 gasUsed) = xmsg_.to == _VIRTUAL_PORTAL_ADDRESS // calls to _VIRTUAL_PORTAL_ADDRESS are syscalls + (bool success, bytes memory result, uint256 gasUsed) = xmsg_.to == VirtualPortalAddress // calls to VirtualPortalAddress are syscalls ? _syscall(xmsg_.data) : _call(xmsg_.to, xmsg_.gasLimit, xmsg_.data); @@ -311,9 +327,9 @@ contract OmniPortal is * @notice Returns the minimum validator set id that can be used for xsubmissions */ function _minValSet() internal view returns (uint64) { - return latestValSetId > XSUB_VALSET_CUTOFF - // plus 1, so the number of accepted valsets == XSUB_VALSET_CUTOFF - ? (latestValSetId - XSUB_VALSET_CUTOFF + 1) + return latestValSetId > XSubValsetCutoff + // plus 1, so the number of accepted valsets == XSubValsetCutoff + ? (latestValSetId - XSubValsetCutoff + 1) : 1; } @@ -330,7 +346,7 @@ contract OmniPortal is function addValidatorSet(uint64 valSetId, XTypes.Validator[] calldata validators) external { require(msg.sender == address(this), "OmniPortal: only self"); require(_xmsg.sourceChainId == omniCChainId, "OmniPortal: only cchain"); - require(_xmsg.sender == _CCHAIN_SENDER, "OmniPortal: only cchain sender"); + require(_xmsg.sender == CChainSender, "OmniPortal: only cchain sender"); _addValidatorSet(valSetId, validators); } @@ -374,7 +390,7 @@ contract OmniPortal is function setNetwork(XTypes.Chain[] calldata network_) external { require(msg.sender == address(this), "OmniPortal: only self"); require(_xmsg.sourceChainId == omniCChainId, "OmniPortal: only cchain"); - require(_xmsg.sender == _CCHAIN_SENDER, "OmniPortal: only cchain sender"); + require(_xmsg.sender == CChainSender, "OmniPortal: only cchain sender"); _setNetwork(network_); } @@ -479,17 +495,115 @@ contract OmniPortal is } /** - * @notice Pause xcalls + * @notice Pause xcalls and xsubissions from all chains */ function pause() external onlyOwner { - _pause(); + _pauseAll(); + emit Paused(); } /** - * @notice Unpause xcalls + * @notice Unpause xcalls and xsubissions from all chains */ function unpause() external onlyOwner { - _unpause(); + _unpauseAll(); + emit Unpaused(); + } + + /** + * @notice Pause xcalls to all chains + */ + function pauseXCall() external onlyOwner { + _pause(ActionXCall); + emit XCallPaused(); + } + + /** + * @notice Unpause xcalls to all chains + */ + function unpauseXCall() external onlyOwner { + _unpause(ActionXCall); + emit XCallUnpaused(); + } + + /** + * @notice Pause xcalls to a specific chain + * @param chainId_ Destination chain ID + */ + function pauseXCallTo(uint64 chainId_) external onlyOwner { + _pause(_chainActionId(ActionXCall, chainId_)); + emit XCallToPaused(chainId_); + } + + /** + * @notice Unpause xcalls to a specific chain + * @param chainId_ Destination chain ID + */ + function unpauseXCallTo(uint64 chainId_) external onlyOwner { + _unpause(_chainActionId(ActionXCall, chainId_)); + emit XCallToUnpaused(chainId_); + } + + /** + * @notice Pause xsubmissions from all chains + */ + function pauseXSubmit() external onlyOwner { + _pause(ActionXSubmit); + emit XSubmitPaused(); + } + + /** + * @notice Unpause xsubmissions from all chains + */ + function unpauseXSubmit() external onlyOwner { + _unpause(ActionXSubmit); + emit XSubmitUnpaused(); + } + + /** + * @notice Pause xsubmissions from a specific chain + * @param chainId_ Source chain ID + */ + function pauseXSubmitFrom(uint64 chainId_) external onlyOwner { + _pause(_chainActionId(ActionXSubmit, chainId_)); + emit XSubmitFromPaused(chainId_); + } + + /** + * @notice Unpause xsubmissions from a specific chain + * @param chainId_ Source chain ID + */ + function unpauseXSubmitFrom(uint64 chainId_) external onlyOwner { + _unpause(_chainActionId(ActionXSubmit, chainId_)); + emit XSubmitFromUnpaused(chainId_); + } + + /** + * @notice Return true if actionId for is paused for the given chain + */ + function isPaused(bytes32 actionId, uint64 chainId_) external view returns (bool) { + return _isPaused(actionId, _chainActionId(actionId, chainId_)); + } + + /** + * @notice Return true if actionId is paused for all chains + */ + function isPaused(bytes32 actionId) external view returns (bool) { + return _isPaused(actionId); + } + + /* + * @notice Return true if all actions are paused + */ + function isPaused() external view returns (bool) { + return _isAllPaused(); + } + + /** + * @notice An action id with a qualifiying chain id, used as pause keys. + */ + function _chainActionId(bytes32 actionId, uint64 chainId_) internal pure returns (bytes32) { + return keccak256(abi.encodePacked(actionId, chainId_)); } /** @@ -543,7 +657,7 @@ contract OmniPortal is /** * @notice Set the fee oracle */ - function _setFeeOracle(address feeOracle_) private { + function _setFeeOracle(address feeOracle_) internal { require(feeOracle_ != address(0), "OmniPortal: no zero feeOracle"); address oldFeeOracle = feeOracle; diff --git a/contracts/src/xchain/OmniPortalConstants.sol b/contracts/src/xchain/OmniPortalConstants.sol index 89ac2aba4..1695635c5 100644 --- a/contracts/src/xchain/OmniPortalConstants.sol +++ b/contracts/src/xchain/OmniPortalConstants.sol @@ -9,30 +9,40 @@ contract OmniPortalConstants { /** * @notice Numerator of the fraction of total validator power required to accept an XSubmission. Ex 2/3 -> 2 */ - uint8 public constant XSUB_QUORUM_NUMERATOR = 2; + uint8 public constant XSubQuorumNumerator = 2; /** * @notice Denominator of the fraction of total validator power required to accept an XSubmission. Ex 2/3 -> 3 */ - uint8 public constant XSUB_QUORUM_DENOMINATOR = 3; + uint8 public constant XSubQuorumDenominator = 3; /** * @notice Number of validator sets since the latest that can be used to validate an XSubmission */ - uint8 public constant XSUB_VALSET_CUTOFF = 10; + uint8 public constant XSubValsetCutoff = 10; + + /** + * @notice Action ID for xsubmissions, used as Pauseable key + */ + bytes32 public constant ActionXSubmit = keccak256("xsubmit"); + + /** + * @notice Action ID for xcalls, used as Pauseable key + */ + bytes32 public constant ActionXCall = keccak256("xcall"); /** * @dev xmsg.destChainId for "broadcast" xcalls, intended for all portals */ - uint64 internal constant _BROADCAST_CHAIN_ID = 0; + uint64 internal constant BroadcastChainId = 0; /** * @dev xmg.sender for xmsgs from Omni's consensus chain */ - address internal constant _CCHAIN_SENDER = address(0); + address internal constant CChainSender = address(0); /** * @dev xmsg.to for xcalls to be executed on the portal itself */ - address internal constant _VIRTUAL_PORTAL_ADDRESS = address(0); + address internal constant VirtualPortalAddress = address(0); } diff --git a/contracts/test/utils/MockPortal.sol b/contracts/test/utils/MockPortal.sol index d1c35dd0b..5c8e2aa31 100644 --- a/contracts/test/utils/MockPortal.sol +++ b/contracts/test/utils/MockPortal.sol @@ -49,8 +49,8 @@ contract MockPortal is IOmniPortal, OmniPortalConstants { require(gasLimit <= xmsgMaxGasLimit, "OmniPortal: gasLimit too high"); require(gasLimit >= xmsgMinGasLimit, "OmniPortal: gasLimit too low"); require(destChainId != chainId, "OmniPortal: unsupported dest"); - require(destChainId != _BROADCAST_CHAIN_ID, "OmniPortal: unsupported dest"); - require(to != _VIRTUAL_PORTAL_ADDRESS, "OmniPortal: no portal xcall"); + require(destChainId != BroadcastChainId, "OmniPortal: unsupported dest"); + require(to != VirtualPortalAddress, "OmniPortal: no portal xcall"); uint256 fee = feeFor(destChainId, data, gasLimit); require(msg.value >= fee, "OmniPortal: insufficient fee"); diff --git a/contracts/test/xchain/OmniPortal_admin.t.sol b/contracts/test/xchain/OmniPortal_admin.t.sol index ea3d549ca..d40f37909 100644 --- a/contracts/test/xchain/OmniPortal_admin.t.sol +++ b/contracts/test/xchain/OmniPortal_admin.t.sol @@ -30,9 +30,9 @@ contract OmniPortal_admin_Test is Base { portal.setFeeOracle(address(0)); } - function test_pause() public { + function test_pauseAll() public { // when not paused, can xcall and xsubmit - assertFalse(portal.paused()); + assertFalse(portal.isPaused()); // xcall params uint8 conf = ConfLevel.Finalized; @@ -56,15 +56,175 @@ contract OmniPortal_admin_Test is Base { // owner can pause vm.prank(owner); portal.pause(); - assertTrue(portal.paused()); + assertTrue(portal.isPaused()); // when paused, cannot xcall and xsubmit - vm.expectRevert("Pausable: paused"); + vm.expectRevert("OmniPortal: paused"); vm.chainId(thisChainId); portal.xcall(chainAId, conf, to, data, gasLimit); - vm.expectRevert("Pausable: paused"); + vm.expectRevert("OmniPortal: paused"); vm.chainId(thisChainId); portal.xsubmit(xsub1); } + + function test_pauseXCall() public { + assertFalse(portal.isPaused(portal.ActionXCall())); + assertFalse(portal.isPaused(portal.ActionXSubmit(), chainAId)); + assertFalse(portal.isPaused(portal.ActionXSubmit(), chainBId)); + + // xcall params + uint8 conf = ConfLevel.Finalized; + address to = address(0x1234); + bytes memory data = abi.encodeWithSignature("test()"); + uint64 gasLimit = 100_000; + + // can xcall + vm.chainId(thisChainId); + portal.xcall{ value: 1 ether }(chainAId, conf, to, data, gasLimit); + + // pause xcall to chain b + vm.prank(owner); + portal.pauseXCallTo(chainBId); + + assertFalse(portal.isPaused(portal.ActionXCall())); + assertFalse(portal.isPaused(portal.ActionXSubmit(), chainAId)); + assertTrue(portal.isPaused(portal.ActionXCall(), chainBId)); + + // can xcall to chain a + vm.chainId(thisChainId); + portal.xcall{ value: 1 ether }(chainAId, conf, to, data, gasLimit); + + // cannot xcall to chain b + vm.expectRevert("OmniPortal: paused"); + vm.chainId(thisChainId); + portal.xcall(chainBId, conf, to, data, gasLimit); + + // unpause xcall to chain b + vm.prank(owner); + portal.unpauseXCallTo(chainBId); + + assertFalse(portal.isPaused(portal.ActionXCall())); + + // can xcall to chain b + vm.chainId(thisChainId); + portal.xcall{ value: 1 ether }(chainBId, conf, to, data, gasLimit); + + // pause all xcall + vm.prank(owner); + portal.pauseXCall(); + + assertTrue(portal.isPaused(portal.ActionXCall())); + + // cannot xcall to chain a + vm.expectRevert("OmniPortal: paused"); + vm.chainId(thisChainId); + portal.xcall(chainAId, conf, to, data, gasLimit); + + // cannot xcall to chain b + vm.expectRevert("OmniPortal: paused"); + vm.chainId(thisChainId); + portal.xcall(chainBId, conf, to, data, gasLimit); + + // unpause all xcall + vm.prank(owner); + portal.unpauseXCall(); + + assertFalse(portal.isPaused(portal.ActionXCall())); + + // can xcall to chain a + vm.chainId(thisChainId); + portal.xcall{ value: 1 ether }(chainAId, conf, to, data, gasLimit); + + // can xcall to chain b + vm.chainId(thisChainId); + portal.xcall{ value: 1 ether }(chainBId, conf, to, data, gasLimit); + } + + function test_pauseXSubmit() public { + assertFalse(portal.isPaused(portal.ActionXSubmit())); + assertFalse(portal.isPaused(portal.ActionXSubmit(), chainAId)); + assertFalse(portal.isPaused(portal.ActionXSubmit(), chainBId)); + + // can xsubmit + // we use a stub xsub, so we don't need to provide a real one + // when not paused, xsubmit should error with "OmniPortal: no xmsgs" + // when paused, xsubmit should error with "OmniPortal: paused" + XTypes.Submission memory xsub; + xsub.blockHeader = XTypes.BlockHeader({ + sourceChainId: chainAId, + confLevel: ConfLevel.Finalized, + offset: 1, + sourceBlockHash: keccak256("hash") + }); + vm.expectRevert("OmniPortal: no xmsgs"); + vm.chainId(thisChainId); + portal.xsubmit(xsub); + + // pause xsubmit from chain b + vm.prank(owner); + portal.pauseXSubmitFrom(chainBId); + + assertFalse(portal.isPaused(portal.ActionXSubmit())); + assertFalse(portal.isPaused(portal.ActionXSubmit(), chainAId)); + assertTrue(portal.isPaused(portal.ActionXSubmit(), chainBId)); + + // can xsubmit from chain a + vm.expectRevert("OmniPortal: no xmsgs"); + vm.chainId(thisChainId); + portal.xsubmit(xsub); + + // cannot xsubmit from chain b + xsub.blockHeader.sourceChainId = chainBId; + vm.expectRevert("OmniPortal: paused"); + vm.chainId(thisChainId); + portal.xsubmit(xsub); + + // unpause xsubmit from chain b + vm.prank(owner); + portal.unpauseXSubmitFrom(chainBId); + + assertFalse(portal.isPaused(portal.ActionXSubmit())); + + // can xsubmit from chain b + vm.expectRevert("OmniPortal: no xmsgs"); + vm.chainId(thisChainId); + portal.xsubmit(xsub); + + // pause all xsubmit + vm.prank(owner); + portal.pauseXSubmit(); + + assertTrue(portal.isPaused(portal.ActionXSubmit())); + + // cannot xsubmit from chain a + xsub.blockHeader.sourceChainId = chainAId; + vm.expectRevert("OmniPortal: paused"); + vm.chainId(thisChainId); + portal.xsubmit(xsub); + + // cannot xsubmit from chain b + xsub.blockHeader.sourceChainId = chainBId; + vm.expectRevert("OmniPortal: paused"); + vm.chainId(thisChainId); + portal.xsubmit(xsub); + + // unpause all xsubmit + vm.prank(owner); + portal.unpauseXSubmit(); + + assertFalse(portal.isPaused(portal.ActionXSubmit())); + + // can xsubmit from chain a + xsub.blockHeader.sourceChainId = chainAId; + vm.expectRevert("OmniPortal: no xmsgs"); + vm.chainId(thisChainId); + portal.xsubmit(xsub); + + // can xsubmit from chain b + xsub.blockHeader.sourceChainId = chainBId; + vm.expectRevert("OmniPortal: no xmsgs"); + vm.chainId(thisChainId); + portal.xsubmit(xsub); + } } diff --git a/contracts/test/xchain/OmniPortal_xsubmit.t.sol b/contracts/test/xchain/OmniPortal_xsubmit.t.sol index 43d8ea8b9..f30137bff 100644 --- a/contracts/test/xchain/OmniPortal_xsubmit.t.sol +++ b/contracts/test/xchain/OmniPortal_xsubmit.t.sol @@ -202,7 +202,7 @@ contract OmniPortal_xsubmit_Test is Base { /// @dev test that an xsubmission from a source chain cannot use an old valSetId, if an /// xsubmission with a newer valSetId has been submitted for that source chain function test_xsubmit_oldValSet_reverts() public { - portal.setLatestValSetId(genesisValSetId + portal.XSUB_VALSET_CUTOFF()); + portal.setLatestValSetId(genesisValSetId + portal.XSubValsetCutoff()); // test that we cannot submit a block with the genesisValSetId XTypes.Submission memory xsub =